Лирика программирования – PHP поиск по массивам

Skillbox – один из лидеров российского рынка онлайн-образования. Более 560 образовательных программ по маркетингу, дизайну, программированию, разработке игр, управлению и мультимедиа. Программы высшего и бизнес-образования вместе с крупнейшими университетами страны и корпоративное обучение для бизнеса. Актуальные подходы к обучению, стажировки и помощь в трудоустройстве.

События Skillbox

День открытых дверей 2021

Посмотрите, как Skillbox живет и работает изнутри

Узнать подробнее

Примеры

Предположим, у нас есть следующий 2-мерный массив:

$userdb = array(array(‘uid’ => ‘100’,’name’ => ‘Sandra Shush’,’pic_square’ => ‘urlof100’),array(‘uid’ => ‘5465’,’name’ => ‘Stefanie Mcmohn’,’pic_square’ => ‘urlof100’),array(‘uid’ => ‘40489’,’name’ => ‘Michael’,’pic_square’ => ‘urlof40489’));

Вызов функции search_by_uid(100) (UID первого пользователя) должен вернуться 0,

Вызов функции search_by_uid(40489) должен вернуться 2,

Я пытался делать циклы, но я хочу быстрее выполнить код.

248

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии

> Без описания
Поиск в теме | Версия для печати
matt_xs

Отправлено: 25 Апреля, 2015 – 19:05:34

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

Добрый вечер, дорогие форумчане!

Имеется такая проблема. Мне необходима функция поиска элементов в двумерном массиве по строкам и столбцам таким образом:

Имеется изначальная матрица

Идём по дв. массиву, пропуская -1, первый на пути элемент 90. Так вот, необходимо проверить если на этой строке, где 90, имеется хотя бы один элемент, не равный -1, и если на этом же столбце (где стоит 90), имеется хотя бы один элемент, не равный -1, то запомнить элемент 90 в новый двумерный массив $T, иначе, если на столбце есть, а строке нет, или наоборот, на строке есть, а на столбце нет, то приравнять элемент 90 в матрице $X к -1. Помогите, пожалуйста. Спасибо, большое, заранее!

   Top
dcc0

Отправлено: 25 Апреля, 2015 – 20:49:49

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

Спойлер (Отобразить)

PHP:
скопировать код в буфер обмена
  1.                     );

  2.     function change_f ($x)      {

  3.         }

  4.       foreach ($x[0] as $k => $val) {

  5.         if($val != 90 && $val > 0)  {

  6.     second($x, $t);

  7.         break;

  8. }

  9.                 change_f ($x);

  10.                         }

  11.                 }    

  12.     }

  13.                     function second($x, &$t) {

  14.              foreach  ($x as $v) {

  15.              if($v[0] != 90 && $v[0] > 0)  {

  16.                         break;

  17. }

  18. change_f ($x);          

  19.                         }

  20.                 }

  21.      }

P.S.
Задач сформулирована плохо “иначе, если на столбце есть, а строке нет, или наоборот, на строке есть, а на столбце нет, то приравнять элемент 90 в матрице $X к -1”

Нет чего: “90”, “-1”?

(Отредактировано автором: 25 Апреля, 2015 – 23:32:55)

—–

Март 2021. Бросил программирование

   Top
matt_xs

Отправлено: 26 Апреля, 2015 – 00:44:02

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

Тогда 90 становится равно -1, а вот 100 запоминаем, так как на столбце и строке есть элементы не равные -1
А если

то когда дойдем до 20, его тоже приравняем к -1, так как 90 стало -1 раньше и получилось, что на столбце у 20 нет элементов, неравных -1

   Top
dcc0

Отправлено: 26 Апреля, 2015 – 07:27:29

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

Т.е. в если в строке или столбце есть хотя бы одно положительное число или именно -1?

Что если там -2?

Если массив всегда содержит три элемента, то можно эксплуатировать тот факт, что

произведение всех чисел в строке, где есть два отрицательных числа, будет положительным:

CUT

(Отредактировано автором: 26 Апреля, 2015 – 11:52:13)

—–

Март 2021. Бросил программирование

   Top
dcc0

Отправлено: 26 Апреля, 2015 – 14:16:44

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

Можно для начала хотя бы просто посчитать количество -1 в каждой строке и столбце на каждой итерации и на основе этого сделать выводы, что делать дальше.

Если -1 в строке или столбце 2 раза, то осуществляется операция с массивом

PHP:
скопировать код в буфер обмена
  1.                 );

  2. $i=0;                          

  3. $a=-1;

  4. while ($i!=$arr_count) {

  5. $b=0;

  6.          foreach ($x[$i] as $v) {

  7.          if ($v==$a) {

  8. ++$b;

  9.         }

  10. }

  11. echo ” -1 found for $b times in a line “;

  12.  $b=0;

  13.          foreach ($x as $val) {

  14.          if ($val[$i]==$a) {

  15. ++$b;

  16.         }

  17. }

  18. echo ” -1 found for $b times in  a  column”;

  19. $i++;

  20. }

(Добавление)
Мда, но даже так не совсем то, но тем не менее количество -1 в столбцах и строках мы определили.
Может быть, нужны ввести промежуточный массив.

(Добавление)
И да, всплывает вопрос, если

array(90,-1,-1),
array(-1,300,100),
array(-1,-1,60)
);
На первой строке и столбце только одно положительное число, то оно должно сразу поменяться или быть записано в какой-то промежуточный массив?

(Отредактировано автором: 26 Апреля, 2015 – 15:21:12)

—–

Март 2021. Бросил программирование

   Top
dcc0

Отправлено: 26 Апреля, 2015 – 17:49:49

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

Я так и не смог составить алгоритм. Могу только порассуждать. Допустим, идем по всему массиву:

Нашли число неравное -1, что тогда?
1. Проверить наличие положительных чисел в строке, т.е. в подмассиве (вероятно, только какой-то функцией для работы с массивами). Если есть положительные, то создать массив Т.
2. Если нет, вероятно, нужно запомнить число и запустить цикл по столбцу
3. Проверить не содержит этот же столбец -1 больше одного раза или искать положительное число.
Т.е. нужно для каждого числа в строке, в каждой строке, запускать цикл для столбца, считать кол-во -1 или проверять положительные или нет после чего еще, видимо, запускать функцию для изменений в массиве. Может, это должен быть какой-то рекурсивный алгоритм.
Получается, как-то много операций.

—–

Март 2021. Бросил программирование

   Top
matt_xs

Отправлено: 26 Апреля, 2015 – 18:04:42

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

Извините, что долго не отвечал. Массив изначальный Х может быть любых размеров, хоть 1000 на 1000. При этом там могут быть только положительные числа и 0. Надо пройтись по строке (исключая -1), если есть числа не равные -1 на строке и столбце (по отношению того, к которому ищем), то запоминаем это число, если нет, то приравнивании его к -1

   Top
matt_xs

Отправлено: 26 Апреля, 2015 – 20:21:22

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

Если такой случай
array(90,-1,-1),
array(-1,300,100),
array(-1,-1,60)
То здесь массив Х станет -1, так как ищем первый элемент, это 90, для него нет на строке и столбце чисел, не равных -1, то 90 становится -1 и идем по столбцу Х далее, там нет, переходим на новую строку, там 300, для него на строке есть 100, а на столбцах нет, значит 300 становится -1, далее 100, для 100 на строке нет чисел (300 мы приравняли к -1), значит его тоже к -1 и остается 60, с ним таже ситуация, ни на строке ни на столбце нет элементов, не равных -1.

   Top
dcc0

Отправлено: 27 Апреля, 2015 – 01:22:29

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

Вообще у нас же квадратная матрица… но что этом на дает? Только то, что ее можно перевернуть…

Еще ход мысли: создадим два пустых массива, stolb и stroka.

1. Одним циклом идем по массиву.

2. Будем проверять, чему равно значение в строке, если не -1, то пишем в массив.

3. Тоже самое для столбца.

4. Получаем два массив со строкой и столбцом, которые хранят любые числа, но не -1,

(у нас в условии речь только о -1)

5. Завершаем цикл и начинаем проверку. Считаем количество значений в массивах,

если в stolb ИЛИ в stroka значений больше 1 – это означает, что число для которого осуществляли поиск, положительное. И помимо этого числа на столбце или строке есть еще число НЕРАВНОЕ – 1. Что и является, как я понимаю главным условием задачи.

Тогда выполняем требуем операции.

PHP:
скопировать код в буфер обмена
  1.                 );

  2.         $i=0;

  3.                 foreach ($x as $v)  {

  4. if ($x[0][$i]!=-1) {

  5.         $stroka[$i]=$x[0][$i];

  6. }      

  7. if ($v[0]!=-1) {

  8.         $stolb[$i]=$v[0];

  9.         }

  10. $i++;

  11. }

  12. if(( count($stolb) >

    1

    )|| (count($stroka) >

    1

    )) {

  13. echo “Создать массив Т”;

  14. }

Продолжение следует…

(Отредактировано автором: 27 Апреля, 2015 – 01:23:13)

—–

Март 2021. Бросил программирование

   Top
matt_xs

Отправлено: 27 Апреля, 2015 – 01:29:38

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

Матрица не обязательно квадратная, произвольных размеров. Сейчас скоро выложу свой вариант

   Top
exlant

Отправлено: 27 Апреля, 2015 – 01:40:31

Post Id

20413-avatar.gif

Посетитель

pips4.gif

Покинул форум

Сообщений всего: 425
Дата рег-ции: Февр. 2015  

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

а у меня вот созрел вопрос, если матрица может быть любых размеров, то по какому критерию преобразовывать в -1, когда все остальные числа в ряду -1, или когда только два
числа -1?

например
20 -1 58 128 155
21 -1 -1 23 168
-1 50 10 100 -1
-1 20 -1 120 25

вот что должно получиться в таком вот случаи?

   Top
dcc0

Отправлено: 27 Апреля, 2015 – 02:04:47

Post Id

Участник

pips6.gif

Покинул форум

Сообщений всего: 1042
Дата рег-ции: Июль 2014  

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

exlant Хотя бы одно число (т.е два) на столбце или строке не – 1

20 не преобразовывается, так 155
20 -1 -1 -1 155
-1-1 -1 23 168
-1 50 10 100 -1
-1 20 -1 120 25

Преобразовывается
20 -1 -1 -1 -1
-1-1 -1 23 168
-1 50 10 100 -1
-1 20 -1 120 25

В случае с моим ” ходом мысли ” – преобразовывается в -1, если мы получили массивы для строки и столбца равные 1 (кол-во).
Если получили столбец или строку с 2 значениями, создаем массив $T
Иначе переходим к следующему значению.

—–

Март 2021. Бросил программирование

   Top
matt_xs

Отправлено: 27 Апреля, 2015 – 02:23:34

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

dcc0 пишет:

Хотя бы одно число (т.е два) на столбце или строке не – 1

на строке И столбце хотя бы одно число, не равное -1.

20 -1 -1 -1 155

-1-1 -1 23 168

-1 50 10 100 -1

-1 20 -1 120 25

здесь 20 преобразовывается в -1

(Добавление)

Решил попробовать таким способом:

иду по матрице $x, если количество элементов (не равных -1) в строке и столбце >=2 и то запоминаю элемент $x[i][j], а если нет, то приравниваю его к -1, но что-то не получается..

PHP:
скопировать код в буфер обмена
  1. function is_existELEM($X)

  2.         {

  3. for ($q=0; $q < count($X); $q++) {
  4. for ($w=0; $w < count($X[]); $w++) {
  5.                                 $K[$q][$w] = 1;

  6.                         }

  7.                 }

  8.                 $as=0;

  9.                 $sa=0;

  10.                 $s = false;

  11.                 $t = false;

  12. for ($i=0; $i < count($X); $i++) {
  13. for ($j=0; $j < count($X[]); $j++) {
  14.                                 if($X[$i][$j]==-1) continue;

  15.                                 else

  16.                                 {

  17.                                                 for ($ki=$X[$i][0]; $ki < 1; $ki++) {

  18.                                                         for($kj=0;$kj<count($X[0]);$kj++)

  19.                                                         {

  20.                                                                 if($X[$ki][$kj]!=-1) $as++;

  21.                                                                 if($as >= 2) $s = true;

  22.                                                                 else $s = false;

  23.                                                         }

  24.                                                 }

  25. for ($ik=$X[$i][]; $ik < count($X); $ik++) {
  26.                                                         for($jk=0;$jk<1;$jk++)

  27.                                                         {

  28.                                                                 if($X[$ik][$jk]!=-1) $sa++;

  29.                                                                 if($sa >= 2) $t = true;

  30.                                                                 else $t = false;

  31.                                                         }

  32.                                                 }

  33.                                         if($s && $t) $K[$i][$j] = $X[$i][$j];

  34.                                         else $X[$i][$j]=-1;

  35.                                         printmatrix($X);

  36.                                         echo “<br><br>”;

  37.                                 }

  38.                         }

  39.                 }

  40.                 return $K;

  41.         }

   Top
exlant

Отправлено: 27 Апреля, 2015 – 02:29:48

Post Id

20413-avatar.gif

Посетитель

pips4.gif

Покинул форум

Сообщений всего: 425
Дата рег-ции: Февр. 2015  

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

Цитата:

на строке И столбце

если на строке И столбце, то тут ничего не должно приравниваться -1, так как есть в строке 155…

(Добавление)

может все таки или, а не и??

(Отредактировано автором: 27 Апреля, 2015 – 02:30:16)

   Top
matt_xs

Отправлено: 27 Апреля, 2015 – 02:31:49

Post Id

Новичок

pips1.gif

Покинул форум

Сообщений всего: 42
Дата рег-ции: Февр. 2014  

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

[+]

exlant пишет:

если на строке И столбце, то тут ничего не должно приравниваться -1, так как есть в строке 155…

а в столбце нету. Моя вина, я не написал, наверное, то, что число 20 мы не включаем в проверку. То есть проверяем кроме -1 и данного числа

   Top
Поиск в теме | Версия для печати
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »

Двумерные массивы в PHP

Двумерный массив в PHP представляет собой массив, хранящий в качестве значений другие массивы. Создаётся он посредством конструктора array():

$flowers = array( array(“фиалки”, 100 , 15), array(“астры”, 60 , 25), array(“каллы”, 180 , 7) );

Итак, в нашем случае массив $flowers включает в себя 3 массива. Тут следует вспомнить, что для доступа к элементам одномерного массива в PHP следует указывать ключ и имя массива. В случае с двумерными массивами это правило тоже действует, правда, есть исключение: каждый элемент имеет 2 ключа: один для выбора строки, другой для выбора столбца.

Если мы хотим вывести все элементы данного массива, достаточно прописать доступ к каждому элементу вручную. Но, разумеется, будет лучше, если мы сделаем это с помощью вложенных циклов:

<?php$flowers = array( array(“фиалки”, 100 , 15), array(“астры”, 60 , 25), array(“каллы”, 180 , 7) ); echo “<h1>Выполняем доступ к элементам вручную</h1>”;echo $flowers[0][0].” стоимость “.$flowers[0][1].” количество “.$flowers[0][2].“<br>”;echo $flowers[1][0].” стоимость “.$flowers[1][1].” количество “.$flowers[1][2].“<br>”;echo $flowers[2][0].” стоимость “.$flowers[2][1].” количество “.$flowers[2][2].“<br>”;echo “<h1>Применяем циклы для вывода элементов</h1>”;echo “<ol>”;for ($row = 0; $row < 3; $row++) { echo “<li><b>Номер строки $row</b>”; echo “<ul>”; for ($col = 0; $col < 3; $col++) { echo “<li>”.$flowers[$row][$col].“</li>”; } echo “</ul>”; echo “</li>”;}echo “</ol>”;?>

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

$flowers = array( array( “Название” => “фиалки”, “Стоимость” => 100, “Количество” => 15 ), array( “Название” => “астры”, “Стоимость” => 60, “Количество” => 25, ), array( “Название” => “каллы”, “Стоимость” => 180, “Количество” => 7 ) );

Ключи повышают удобство работы с массивом, особенно тогда, когда надо получить одно из значений. Нужные данные найти совсем просто, обратившись к правильной ячейке и применяя значимые имена столбца и строки. Но тут мы теряем возможность последовательного обхода массива посредством цикла for.

Перебрать массивы, используя цикл for, можно, только когда мы говорим о дочерних массивах. Дело в том, что они, в свою очередь, считаются ассоциативными, поэтому для перебора подойдёт цикл foreach. Также можно выполнить перебор элементов вручную:

<?php$flowers = array( array( “Название” => “фиалки”, “Стоимость” => 100, “Количество” => 15 ), array( “Название” => “астры”, “Стоимость” => 60, “Количество” => 25, ), array( “Название” => “каллы”, “Стоимость” => 180, “Количество” => 7 ) );echo “<h1>Выполняем доступ к элементам ассоциативного массива вручную</h1>”;for ($row = 0; $row < 3; $row++) { echo $flowers[$row][“Название”].” стоимость “.$flowers[$row][“Стоимость”] .” количество “.$flowers[$row][“Количество”]; echo “<br>”;}echo “<h1>Используем для доступа к элементам цикл foreach</h1>”;echo “<ol>”;for ($row = 0; $row < 3; $row++) { echo “<li><b>Номер строки $row</b>”; echo “<ul>”; foreach($flowers[$row] as $key => $value) { echo “<li>”.$value.“</li>”; } echo “</ul>”; echo “</li>”;}echo “</ol>”;?>

Кстати, совсем необязательно применять во время создания двумерного массива конструктор array() — подойдут и квадратные скобки:

$flowers = [ [ “Название” => “фиалки”, “Стоимость” => 100, “Количество” => 15 ], [ “Название” => “астры”, “Стоимость” => 60, “Количество” => 25, ], [ “Название” => “каллы”, “Стоимость” => 180, “Количество” => 7 ] ];

Обход двумерного массива.

Обход двумерного массива – есть не что иное, как последовательныйперебор элементов массива. А в листинге ниже представлен код который ещё ивыводит на монитор содержимое.

Листинг № 3 – Обход двумерного массива

<?php
// обход двумерного массива
for($i=0$i count($THN); $i++)  

   

   for($q=0$q count($THN[$i]); $q++) 
   { 
     echo  
” » “.$THN[$i][$q];    
   } 
   echo 
“<br>”

?>На мониторе увидим следующее:

» Honda » Hummer » BMW » Toyota
» AH » TU-144 » Boing » СУ
» Тигр » Пантера » Т-34 » Аль Халид
» Кузнецов » Ямато » Ясень » Петропавловск

Это пример обхода, при котором двумерный массив является не ассоциативным, т.е.ключами двумерного массива выступают числа. Чтобы вывести на монитор содержимоеассоциативного массива, рассмотрим пример в листинге ниже.

Листинг № 4 – Обход двумерного ассоциативного массива.

<?php

// Подсчитываем количество элементов в массиве
$sum count($TH);

// Ассоциативный массив следует обходить, при помощи конструкции foreach 
foreach($TH as $key => $vol
{
   
// выводим название массива
   
echo $key .” — “;
   
   
// обход
   
for($q=0$q <= $sum$q++)
   {
     echo 
” || “.$TH[$key][$q];   
   }
   echo 
“<br>”;
}

?>На мониторе увидим следующее:Машины — || Honda || Hummer || BMW || Toyota ||
Самолёты — || AH || TU-144 || Boing || СУ ||
Танки — || Тигр || Пантера || Т-34 || Аль Халид ||
Корабли — || Кузнецов || Ямато || Ясень || Петропавловск ||

Ниже представлен пример упорядоченного вывода ассоциативного массива.

Листинг № 5 – Обход двумерного массива и вывод в таблице.

<?php 

// массив Машины
$m = array(‘Honda’,‘Hummer’,‘BMW’,‘Toyota’);

// массив Самолёты
$s = array(‘AH’,‘TU-144’,‘Boing’,‘СУ’);

// массив Танки
$t = array(‘Тигр’,‘Пантера’,‘Т-34’,‘Аль Халид’);

// массив Корабли
$k = array(‘Кузнецов’,‘Ямато’,‘Ясень’,‘Петропавловск’);

// двумерный массив Техника
$TH = array(‘Машины’=>$m‘Самолёты’=>$s‘Танки’=>$t‘Корабли’=>$k);

// Подсчитываем количество элементов в массиве
$sum count($TH);

echo “<table>”;
foreach(
$TH as $key => $vol
{
   
// выводим название массива
   
echo “<th>”.$key .“</th>”;
   
   
// обход
 
   
for($q=0$q <= $sum$q++)
   {
     echo 
“<tr><td>  “.$TH[$key][$q].“<td></tr>”;   
   } 
}

echo “</table>”;
?>На мониторе увидим следующее:

Honda
Hummer
BMW
Toyota
AH
TU-144
Boing
СУ
Тигр
Пантера
Т-34
АльХалид
Кузнецов
Ямато
Ясень
Петропавловск

Из вышесказанного, можно сделать вывод, что по сути при выводе на монитор послеобхода двумерного массива, вложенный массив выступает как строка таблицы сданными, что и формирует в свою очередь матрицу. Если мы изначально составимправильно вложенные массивы, то на выходе мы сможем получить таблицу с данныминапример анкетных данных, каждого работника. Рассмотрим ещё один пример, чистоматрица.

Листинг № 6 – Обход двумерного массива, матрица.

<?php 

// массивы с данными на работников предприятия
$m = array(‘Александр’,‘Новиков’,’35’,‘ул. Новоясеневский проспект д. 7’,‘125-89-63’);
$s = array(‘Алексей’,‘Бодров’,’28’,‘ул. Астраханская д. 45’,‘256-89-63’);
$t = array(‘Николай’,‘Хмельницкий’,’28’,‘ул. Боровицкая д. 25’,‘100-89-63’);
$k = array(‘Олег’,‘Нестеров’,’44’,‘ул. Каховка д. 11’,‘330-80-63’);
$z = array(‘Олег’,‘Нестеров’,’44’,‘ул. Каховка д. 11’,‘330-80-63’);
$x = array(‘Олег’,‘Нестеров’,’44’,‘ул. Каховка д. 11’,‘330-80-63’);

// двумерный массив с данными о сотрудниках
$TH = array($m$s$t$k$z$x);

// Подсчитываем количество элементов в массиве
$sum count($TH);

echo “<table border=’1′ cellpadding=’5′>
      <tr>
      <th>Имя</th><th>Фамилия</th><th>Возраст</th><th>Адрес</th><th>Телефон</th>
      </tr>”
;
for(
$i=0$i <= $sum$i++) 
{
  echo 
“<tr>”;
  
$sum count($TH[$i]);
   for(
$q=0$q $sum$q++)
   {
     echo 
“<td>  “.$TH[$i][$q].“</td>”;   
   }
   echo 
“</tr>”;
}

echo “</table>”;

?>На мониторе увидим следующее:

Имя Фамилия Возраст Адрес Телефон
Александр Новиков 35 ул. Новоясеневский проспект д. 7 125-89-63
Алексей Бодров 28 ул. Астраханская д. 45 256-89-63
Николай Хмельницкий 28 ул. Боровицкая д. 25 100-89-63
Олег Нестеров 44 ул. Каховка д. 11 330-80-63

Я думаю вы уже догадались, что список значений массива на каждого человека можетбыть бесконечно большим, не только имя, фамилия, возраст и т.д., можно продолжать взависимости от надобности. И хотелось бы добавить, что конечно формированиемассивов, т.е. занесение данных, происходить должно не вручную. В этом урокеприведены примеры, наглядно показывающие работу с двумерным массивом, а точнее сего содержимым.

SETTER © LPHP.RU
20.05.2010 15:56:38

Комментарии

Li11.04.2011 01:01:04

В Паскале не получается>.

Svan11.04.2011 05:55:53

Могу предположить, что в Паскале синтаксис другой, отличный от PHP ))

Magzhan08.11.2011 17:21:31

Ееееееей этот код не работает же. Там ошибка на строке 33

Ева03.04.2012 16:29:09

Всё там работает, главное руки и голову вкл.

Жека 06.04.2012 09:30:45

СПАСИБО БОЛЬШОЕ ОЧЕНЬ ПОМОГ!! ПРИОГРОМНОЕ СПАСИБО

Jizz18.06.2012 21:15:40

ogromnaja blagodarnost za matricu.a to uze kotorij den pitaus vrubitsa kak formiruetsa html tablica

Konstant1n26.06.2012 19:42:47

Хорошо и доступно написано….

vr19.07.2012 08:19:47

В качестве примера, чтобы разобраться с массивами, конечно, подойдет. Но для реального проекта лучше воспользоваться двумя вложенными foreach (не обязательно только для ассоциативных массивов)

iLeonidze28.02.2013 13:12:02

Двумерные массивы на замену таблицам?? Интересноооо

Сережа10.04.2013 04:32:18

Здравствуйте.Помогите,пожалуйста,решить задачи.Заранее спасибо.Задача 1Найти максимальный по абсолютному значению элемент массива.Задача 2Найти сумму элементов,индексы которых,в сумме составляют кЗадача 3Найти среднее арифметическое элементов массива с точностью додвух десятичных знаков.Задача4Найти сумму элементов, стоящих на главной диагонали.Задача 5Найти сумму элементов, стоящих на побочной диагонали.

аноним23.04.2013 12:51:14

я ничего не понял

пупок11.07.2013 13:06:44

Как сравнить два двумерных массива полученных из MySQL количество строк может быть различно а столбцов одинаково. Нужно сравнить две таблици и если в каком либо элементе строки есть отличие вывести в таблицу. Спасибо заранее.

SETTER11.07.2013 13:12:12

На форум обращайтесь. Здесь комментарии пишем.

arrow-1-up_0.png

PHP-МАСТЕР.
От теории до собственной CMS интернет-магазина
 

php.jpg

Подробнее

Бесплатный курс по PHP программированию


Подробнее

Трехмерный массив

А вот для перебора трехмерного массива уже нужно использовать три вложенных цикла. Пусть для примера у нас дан вот такой массив:

<?php $arr = [ [ [‘a’, ‘b’], [‘c’, ‘d’], ], [ [‘e’, ‘f’], [‘g’, ‘h’], ], [ [‘i’, ‘j’], [‘k’, ‘l’], ], ];?>

Давайте выведем все его элементы на экран:

<?php foreach ($arr as $sub) { foreach ($sub as $subsub) { foreach ($subsub as $elem) { echo $elem; } } }?>

Дан следующий массив:

<?php $arr = [ [ [1, 2, 3], [6, 7, 8], [3, 8, 4], [6, 7, 9], ], [ [9, 1, 2], [4, 5, 6], ], [ [9, 1, 2], [4, 5, 6], [5, 6, 3], ], ];?>

С помощью трех вложенных циклов найдите сумму элементов этого массива.

4 шага к переменам в карьере и жизни

  • Изучаете материал на платформе в любое удобное время
  • Общаетесь с экспертами и единомышленниками в Telegram
  • Выполняете практические задания, получаете обратную связь и закрепляете знания
  • Готовите проект и дополняете им своё портфолио

Решение

function searchForId($id, $array) {foreach ($array as $key => $val) {if ($val[‘uid’] === $id) {return $key;}}return null;}

Это будет работать Вы должны назвать это так:

$id = searchForId(‘100’, $userdb);

Важно знать, что если вы используете === сравниваемые операторы типы должны быть точно такими же, в этом примере вы должны искать string или просто использовать == вместо ===,

На основе angoru ответ. В более поздних версиях PHP (>= 5.5.0) вы можете использовать однострочник.

$key = array_search(‘100’, array_column($userdb, ‘uid’));

Вот документация: http://php.net/manual/en/function.array-column.php.

365

Сотрудничаем
с ведущими компаниями

Собираем лучшие вакансии в отрасли, готовим к интервью и рекомендуем вас компаниям-партнёрам.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...