Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регуляльные выражовывания


Автор: Kirill Baranov 21.7.2005, 23:13
есть строка:
1,2,3,4,5,6,7,8,9,10,

как переместить к примеру цифру 5 при каждом обновлении экрана налево? то есть при обновлении страницы чтобы было: 1,2,3,5,4,6,7,8,9,10, потом: 1,2,5,3,4,5,6,7,8,9,10,


ну с обновлением страницы это я пример привел просто... вот как такое сделать? smile smile

Автор: Mal Hack 21.7.2005, 23:28
Самый просто вариант. имеем массив чисел и потом циклом генерим массив уже в той сортировке, которая нам нужна.

Автор: Kirill Baranov 21.7.2005, 23:40
Mal Hack
Вот это и есть самый главный вопрос smile Array`ем пробовал - не выходит.

Есть shuffle, reverse... но это ж не то всё... надо, чтобы был именно определенный порядок.

Автор: Mal Hack 22.7.2005, 00:15
Код

$c = 5;
$pos = 4;
for( ... count ( $ar1 ))
{
if($c == $ar1[$i])
 { continue; }
elseif( $i == $pos )
 { 
  $ar2[] = $c; 
  $ar2[] = $ar1[$i];
  $i++;
 }
else
 { $ar2[] = $ar1[$i] }

}


Автор: Kirill Baranov 22.7.2005, 11:29
Код

  $ar2[] = $c; 
  $ar2[] = $ar1[$i];


Вопрос, а что это за $ar2[]??? Почему он идет как массив? Сразу PHP срабатывает и говорит "Fatal error: Cannot use [] for reading"

Чаво-то я не понимаю. smile

Автор: izOne 22.7.2005, 12:27
$ar2[] - для добавления эллемента в конец массива

Код

{
if($c == $ar1[$i])
 { continue; }
elseif( $i == $pos )
 { 
  $ar2[] = $c; 
  $ar2[] = $ar1[$i];
 }
else
 { $ar2[] = $ar1[$i] }
  $i++;
}

Автор: Kirill Baranov 22.7.2005, 12:29
izOne
Тогда почему у меня на сервере PHP ругается и говорит, что это фатальная ошибка?

Автор: Mal Hack 22.7.2005, 12:47
Попробуй, работает 100%.

Код
<pre>
<?php

$c = 5;
$pos = 3;

$ar2 = array();
$ar1 = array( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 );

for( $i = 0 ; $i < count ( $ar1 ) ; $i++ )
 {
  if( $c == $ar1[$i] && $i == $pos )
   { $ar2[] = $c; }
  elseif( $c == $ar1[$i] )
   { continue; }
  elseif( $i == $pos )
   { 
    $ar2[] = $c; 
    $ar2[] = $ar1[$i];
   }
  else
   { $ar2[] = $ar1[$i]; }
 }

 print_r( $ar2 );
 
?>


Автор: Kirill Baranov 22.7.2005, 14:01
Mal Hack
Гениально!!!

и последний вопрос... вот эти цифры "1,2,3,4,5,6,7,8,9,10" берутся у меня из переменной...
Код

$test="0,1,2,3,4,5,6,7,8,9,10";

$ex=explode(",",$test);


Если в array засунуть $ex, то получится "Array ( [0] => Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 ) ) "

То есть PHP воспринимает $ex не как массивы а как одну переменную... Как сделать, чтобы все было нормально, то есть все обрабатывалось как при вводе в саму array цифры (как в твоем скрипте)?

Автор: Mal Hack 22.7.2005, 14:44
Сначала получаешь $ar1 explode по строке.
Когда все надо собрать - join( "," , $ar2 );

Автор: Kirill Baranov 22.7.2005, 18:12
А есть еще один вариант:

Код

<?

$sdvig="*".$sdvig1."*";
$test="start*".$vhod."*end";

$test1=substr($test, 0, strpos($test, $sdvig));
$test2=substr($test, strpos($test, $sdvig)+strlen($sdvig));

$left_el=substr($test1, strrpos($test1, "*")."*")."*";
$right_el="*".substr($test2, 0, strpos($test2, "*")+1);

if ($kyda=="left" && strlen($test1)>5) {
    $test1=str_replace($left_el,"",$test1."*");
    $vhod=$test1.$sdvig.substr($left_el,1).$test2; }
if ($kyda=="right" && strlen($test2)>3) {
    $test2=str_replace($right_el,"","*".$test2);
    $vhod=$test1.$right_el.substr($sdvig,1).$test2; }

$vhod=str_replace("start*","",$vhod);
$vhod=str_replace("*end","",$vhod);

?>

<form name=form1 method=post action=>
<input type=image border=0 name=imageField src=images/form_confirm.jpg width=19 height=19>
строка: <input type=text name=vhod size=50 value='
<? echo $vhod; ?>
'>
<br>
что двигать: <input type=text name=sdvig1 size=10 value='
<? echo $sdvig1; ?>
'>
<br>
куда left/right: <input type=text name=kyda size=10 value='
<? echo $kyda; ?>
'>
</form>


Автор: Mal Hack 22.7.2005, 18:44
Kirill Baranov ну я тоже могу извратиться через побитоый сдвиг или что-ть подобное smile

Автор: Kirill Baranov 23.7.2005, 09:44
Mal Hack
Ну это я так...просто

Автор: Kirill Baranov 23.7.2005, 16:45
Mal Hack
Твой пример конечно лучше и проще, большое спасибо.

Автор: Kirill Baranov 23.7.2005, 17:30
Еще один вопрос... как в array запихнуть перменную $test="0,1,2,3,4,5,6,7,8,9,10"; ???

Автор: Mal Hack 23.7.2005, 17:37
Ты же сам писал выше:
Цитата(Kirill @ 22.7.2005, 15:01)
$test="0,1,2,3,4,5,6,7,8,9,10";
$ex=explode(",",$test);


Автор: Kirill Baranov 23.7.2005, 17:45
Mal Hack
Код

Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 10 [9] => 11 [10] => 12 [11] => 13 ) ) 


Вот что получается при коде
Код

$stro4ka="1,2,3,4,5,6,7,8,10,11,12,13";
$ar1=explode(",",$stro4ka);

$c = 5;
$pos = 3;

$ar2 = array();
$ar1 = array($ar1);


То есть получается, что два раза array идет... и в первом array только один элемент 0!!!

Автор: Mal Hack 23.7.2005, 17:55
Kirill Baranov а че ты хочешь?
$ar1 = array($ar1); - создает массив, с 1 элементом, где этим нулевым элементом будет уже сгенерированный ранее массив.

Автор: Kirill Baranov 23.7.2005, 18:01
Mal Hack
Ок, а как тогда в дальше в скрипте это дело использовать? ведь получается 2 array и скрипт получается не срабатывает

Автор: Mal Hack 23.7.2005, 18:14
Kirill Baranov блин, ну такие-то вещи надо знать smile

Код
<pre>
<?php
$c = 5;
$pos = 3;

$ar2 = array();
$ar1 = array();

$stro4ka="1,2,3,4,5,6,7,8,10,11,12,13";
$ar1=explode(",",$stro4ka);

for( $i = 0 ; $i < count ( $ar1 ) ; $i++ )
 {
  if( $c == $ar1[$i] && $i == $pos )
   { $ar2[] = $c; }
  elseif( $c == $ar1[$i] )
   { continue; }
  elseif( $i == $pos )
   { 
    $ar2[] = $c; 
    $ar2[] = $ar1[$i];
   }
  else
   { $ar2[] = $ar1[$i]; }
 }
 print_r( $ar2 );
 
?>

Автор: Kirill Baranov 23.7.2005, 18:19
Mal Hack
А я не знаю smile и в книжках такого нету. Извини, если что...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)