1

私の多次元配列は機能しています。しかし、経由で呼び出すときに配列を使用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"2つしか表示されないはずです。たとえば、これは間違っています。他の行は表示されないはずです。

ここに画像の説明を入力してください

代わりにこれである必要があります

ここに画像の説明を入力してください

4

4 に答える 4

2

更新しました

解決策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;
        
    }
}

?>
于 2012-10-01T11:43:29.607 に答える
0

col-Variableには数値(1、2、または3)が含まれていますが、explode-callは単語(緑、青、オレンジ)を含む配列を返します

PHPは1から「1」へのキャストを処理できますが、1から「緑」へのキャストはできません。

于 2012-10-01T11:42:22.330 に答える
0

ただ推測するだけで、このようなものを印刷したいと思うかもしれません

$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 =黄色、混合=青と緑
于 2012-10-01T11:43:09.493 に答える
0

私はあなたが単にこのようなことをすることができると思います:

<?
$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>";
}

?>
于 2012-10-01T12:00:58.957 に答える