Мой многомерный массив работает. Но я не могу использовать 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>";
Вывод
Я думаю, вы можете просто сделать что-то вроде этого:
<? $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>"; } ?>