Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа с массивом. Хэлп!
Форумы портала PHP.SU » » Вопросы новичков » Работа с массивом. Хэлп!

Страниц (1): [1]
 

1. Ailie - 20 Ноября, 2011 - 18:21:13 - перейти к сообщению
Добрый день, коллеги!
Помогите начинающему недокодеру, ибо мозг уже поломала.

Итак, у нас есть двухмерный массив (i строк, j столбцов). Нужен скрипт, который выведет на экран номера строк, содержащих двузначные числа.

Реализовать пытаюсь с помощью перебора элементов и поиска сопадений (preg_match).

Получается вот такой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.   $a=array(1, 2, 54, 78);
  4.   $b=array(25, 678, 9, 8);
  5.   $c=array(6, 4, 654, 2);
  6.   $d=array(1, 8, 8, 9);
  7.   $e=array(1, 13, 8, 6);
  8.   $mas=array($a, $b, $c, $d, $e); //это сам массив
  9.   $k=0;                        //этот элемент будет принимать 2 значения - 0 в случае                 несовпадения и 1 в случае совпадения
  10.   $j=0; //счётчик элементов
  11.   $i=0; //счётчик строк
  12.  
  13.   $SL=count($mas[0])-1;  //длина строки массива
  14.   $QS=count($mas)-1; //число строк
  15.  
  16.    for ($i=0; $i<=$QS; $i++)   //перебираем строки
  17.         {for ($j=0; $j<=$SL; $j++)   //перебираем элементы
  18.            {$k=preg_match('/^[1-9][0-9]$/', $mas[$i][$j]);}; //проверка соответсвия элемента шаблону
  19.            if ($k=1) {echo $i;};}
  20. ?>
  21.  


Пояснения к коду: Мы анализируем каждый элемент на соответствие шаблону и результат записываем в $k. Если скрипт находит соответствие, то в $k заносится 1, в противном случае 0. Если соответствие найдено (к=1), то выводим номер строки (i).

Так он должен работать. Но не работает. Выдает 01234 (т.е все строки, что неправильно).
Ставила echo $k после строки 18, чтобы проверить, правильные ли значение получает $k. Вывод - правильные. Также добавляла else(какое-нибудь действие) в строку 19. В итоге при $k=0, ничего не происходит. Т.е на этот этап цикла приходит только $k=1, причём независимо от того, какое $k получилось в 18 строке.

Ошибка где-то после 18 строки, я думаю, поскольку до неё всё выполняется правильно.
Или в цикле запуталась.

Помогите, пожалуйста, разобраться, что не так.

З.Ы. Я совсем новичок и пока очень криворукий, так что объясняйте, пожалуйста, как для умственно отстлого ребёнкаУлыбка
2. Bio man - 20 Ноября, 2011 - 18:35:07 - перейти к сообщению
Ailie пишет:
;};}
а что это за смайлики на 19 строке? имхо, для перебора массива лучше использовать foreach. и вообще можно реализовать все проще, в пару строк и без регулярок
3. Ailie - 20 Ноября, 2011 - 18:50:00 - перейти к сообщению
Bio man пишет:
а что это за смайлики на 19 строке?

Закрывают циклы.

Без регулярок? Имеете в виду, просто искать числа диапазона 11-99? Тогда туда же попадут и числа с дробью, а мне нужны только целые.

А насчёт foreach я пока не пойму, как с помощью него получить номер строки.
4. Bio man - 20 Ноября, 2011 - 19:27:05 - перейти к сообщению
Ailie пишет:
Закрывают циклы.

в таком случае

держи
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a=array(1, 2, 54, 78);
  3. $b=array(25, 678, 9, 8);
  4. $c=array(6, 4, 654, 2);
  5. $d=array(1, 8, 8, 9);
  6. $e=array(1, 13, 8, 6);
  7. $mas=array($a, $b, $c, $d, $e); //это сам массив
  8.  
  9. foreach($mas as $i => $v) {   //перебираем строки
  10.         foreach($v as $j) {   //перебираем элементы
  11.         {
  12.                 if((gettype($j) === 'float') || (gettype($j) === 'string')) continue;
  13.                 if($j > 9 && $j < 100) {
  14.                         echo $i;
  15.                 }
  16.         }
  17. ?>
5. Ailie - 20 Ноября, 2011 - 19:41:20 - перейти к сообщению
Благодарю за помощь!!
Поставила бы "спасибо", но количество сообщений пока не позволяет.

Bio man пишет:
в таком случае


Если не поставить точку с запятой перед фигурной скобкой - компилятор ругается. Поэтому если много вложенных циклов, получаются такие смайлики.

Если я правильно поняла, в коде j - это не номер элемента, а значение?
i - номер строки, v - номер элемента?
6. Bio man - 20 Ноября, 2011 - 19:50:56 - перейти к сообщению
$i - индекс ячейки ($mas[$i])
$v - значение ячейки (массив)
$j - число которое нужно сравнивать
Ailie пишет:
Если не поставить точку с запятой перед фигурной скобкой - компилятор ругается
там у тебя после } стаяла точка с запятой...

 

Powered by ExBB FM 1.0 RC1