Почему мой многомерный массив PHP не работает?

Мой многомерный массив работает. Но я не могу использовать explode или in_array для ограничения массива при вызове через $_GET

 <? $shop = array( array("red", "black", "blue", "green"), array("orange"), array("orange", "black"), array("pink", "yellow") ); foreach ($shop as $rowNumber => $row) { echo "<li><b>The row number $rowNumber</b>"; echo "<ul>"; foreach ($row as $col) { if (in_array($col, explode(' and ', $_GET['filter']))){ echo "<li>".$col."</li>"; } } echo "</ul>"; echo "</li>"; } ?> 

Если я запускаю скрипт с $_GET["filter"]=="black" он отображает все элементы – он должен отображать только два, например, это неверно: другие строки не должны отображаться:

введите описание изображения здесь

должно быть это вместо этого

введите описание изображения здесь

обновленный

Решение 1

  <? $shop = array( array("1", "red", "black", "blue and green"), array("2", "orange"), array("3", "pink", "yellow", "blue and green") ); for ($row = 0; $row < count($shop); $row++) { $lis = ""; for ($col = 0; $col < count($shop[$row]); $col++) { if (in_array($shop[$row][$col], explode(' and ', $_GET['filter'])) || empty($_GET['filter'])){ $lis .= "<li>".$col."</li>"; } } if($lis != "") { echo "<li><b>The row number $row</b>"; echo "<ul>"; echo $lis; echo "</ul>"; echo "</li>"; } } ?> 

Решение 2

 <? $shop = array( array("1", "red", "black", "blue and green"), array("2", "orange"), array("3", "pink", "yellow", "blue and green") ); for ($row = 0; $row < count($shop); $row++) { $lis = ""; for ($col = 0; $col < count($shop[$row]); $col++) { if (in_array($shop[$row][$col], explode(' and ', $_GET['filter']))){ $lis .= "<li>".$col."</li>"; } } if($lis=="") { echo "$row"; } else { echo $lis; } } ?> 

Ваша col-Variable содержит число (1, 2 или 3). Но вызов explode возвращает массив, содержащий слова (зеленый, синий, оранжевый)

Хотя PHP может обрабатывать листинг от 1 до «1», он не может отбрасывать от 1 до «зеленого».

Просто Гюссинг, может быть, вы хотите напечатать что-то вроде этого

 $shop = array(array("1","red","black","blue and green"),array("2","orange"),array("3","pink","yellow","blue and green")); echo "<ul>"; foreach ( $shop as $info ) { $info = array_pad($info, 4, "none"); list($id, $color1, $color2, $mixed) = $info; printf("<li><b>The row number = %d , Color = 1 %s , Color 2 = %s , Mixed = %s </b></li>", $id, $color1, $color2, $mixed); } echo "</ul>"; 

Вывод

  • Номер строки = 1, Цвет = 1 красный, Цвет 2 = черный, Смешанный = синий и зеленый
  • Номер строки = 2, Цвет = 1 оранжевый, Цвет 2 = нет, Смешанный = нет
  • Номер строки = 3, Цвет = 1 розовый, Цвет 2 = желтый, Смешанный = синий и зеленый

Я думаю, вы можете просто сделать что-то вроде этого:

 <? $shop = array( array("red", "black", "blue", "green"), array("orange"), array("orange", "black"), array("pink", "yellow") ); foreach ($shop as $rowNumber => $row) { echo "<li><b>The row number $rowNumber</b>"; echo "<ul>"; foreach ($row as $col) { //Compare both values, if they match, it prints if ($col == $_GET['filter']) { echo "<li>".$col."</li>"; } } echo "</ul>"; echo "</li>"; } ?>