21

PHP でこの構造の連想配列を反復処理する簡単な方法はありますか。

配列$searchesには番号付きのインデックスがあり、4 ~ 5 個の連想部分があります。したがって、 だけでなく、 も繰り返す必要$searches[0]があります。難しいのは、インデックスによってパーツの数が異なることです (1 つまたは 2 つ欠けているものもあります)。$searches[n]$searches[0]["part0"]$searches[n]["partn"]

これを、きちんとした、きちんとした、わかりやすい方法で行うことについての考えはありますか?

4

7 に答える 7

43

foreach2 つのループをネストします。

foreach ($array as $i => $values) {
    print "$i {\n";
    foreach ($values as $key => $value) {
        print "    $key => $value\n";
    }
    print "}\n";
}
于 2008-08-25T13:24:28.990 に答える
16

特に再帰関数に適した場所のように見えます。2 レベル以上の深さがある場合。

function doSomething(&$complex_array)
{
    foreach ($complex_array as $n => $v)
    {
        if (is_array($v))
            doSomething($v);
        else
            do whatever you want to do with a single node
    }
}
于 2008-10-07T07:22:10.977 に答える
5

ネストされた foreach ステートメントを使用できるはずです

phpのマニュアルより

/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        echo "$v2\n";
    }
}
于 2008-08-25T13:21:48.717 に答える
0

この多次元配列を考えてみてください。この関数が役立つことを願っています。

$n = array('customer' => array('address' => 'Kenmore street',
                'phone' => '121223'),
      'consumer' => 'wellington consumer',
      'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                     'age' => 32,
                 'nationality' => 'Tonga')
      );



iterator($n);

function iterator($arr){

    foreach($arr as $key => $val){

    if(is_array($val))iterator($val);

    echo '<p>key: '.$key.' | value: '.$val.'</p>';

    //filter the $key and $val here and do what you want
    }

}
于 2012-10-05T22:51:33.433 に答える
0

すべての「part[n]」アイテムをループし、 isset を使用してそれらが実際に存在するかどうかを確認できますか?

于 2008-08-25T13:21:51.137 に答える
0

ここであなたが何を意味するのか本当にわかりません.確かに foreach ループのペアはあなたが必要とすることをしますか?

foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
        // code
    }
}

それとも再帰的なものが必要ですか?サンプルデータと、データをどのように返すかというコンテキストについて、もっとお手伝いできると思います。

于 2008-08-25T13:26:53.713 に答える