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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с массивом. Хэлп!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите разобраться со скриптом
Ailie
Отправлено: 20 Ноября, 2011 - 18:21:13
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2011  
Откуда: Севастополь


Помог: 0 раз(а)




Добрый день, коллеги!
Помогите начинающему недокодеру, ибо мозг уже поломала.

Итак, у нас есть двухмерный массив (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 строки, я думаю, поскольку до неё всё выполняется правильно.
Или в цикле запуталась.

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

З.Ы. Я совсем новичок и пока очень криворукий, так что объясняйте, пожалуйста, как для умственно отстлого ребёнкаУлыбка
 
 Top
Bio man
Отправлено: 20 Ноября, 2011 - 18:35:07
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Ailie пишет:
;};}
а что это за смайлики на 19 строке? имхо, для перебора массива лучше использовать foreach. и вообще можно реализовать все проще, в пару строк и без регулярок
 
 Top
Ailie
Отправлено: 20 Ноября, 2011 - 18:50:00
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2011  
Откуда: Севастополь


Помог: 0 раз(а)




Bio man пишет:
а что это за смайлики на 19 строке?

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

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

А насчёт foreach я пока не пойму, как с помощью него получить номер строки.
 
 Top
Bio man
Отправлено: 20 Ноября, 2011 - 19:27:05
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




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. ?>

(Отредактировано автором: 20 Ноября, 2011 - 19:29:51)

 
 Top
Ailie
Отправлено: 20 Ноября, 2011 - 19:41:20
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2011  
Откуда: Севастополь


Помог: 0 раз(а)




Благодарю за помощь!!
Поставила бы "спасибо", но количество сообщений пока не позволяет.

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


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

Если я правильно поняла, в коде j - это не номер элемента, а значение?
i - номер строки, v - номер элемента?
 
 Top
Bio man
Отправлено: 20 Ноября, 2011 - 19:50:56
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




$i - индекс ячейки ($mas[$i])
$v - значение ячейки (массив)
$j - число которое нужно сравнивать
Ailie пишет:
Если не поставить точку с запятой перед фигурной скобкой - компилятор ругается
там у тебя после } стаяла точка с запятой...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB