PHP での複雑な連想配列の反復処理
-
09-06-2019 - |
質問
PHP でこの構造の連想配列を反復処理する簡単な方法はありますか?
配列 $searches
には番号付きのインデックスがあり、4 ~ 5 つの関連部分があります。したがって、反復する必要があるだけではありません $searches[0]
を通して $searches[n]
, 、 だけでなく $searches[0]["part0"]
を通して $searches[n]["partn"]
. 。難しいのは、インデックスごとにパーツの数が異なることです (1 つまたは 2 つ欠落しているものもあります)。
これを、素晴らしく、きちんとしていて、わかりやすい方法で行うことについて考えていますか?
解決
ネスト 2 foreach
ループ:
foreach ($array as $i => $values) {
print "$i {\n";
foreach ($values as $key => $value) {
print " $key => $value\n";
}
print "}\n";
}
他のヒント
死霊術に疑問があるのはわかっていますが、Spl Iterators を使用すると、多次元配列の反復処理が簡単になります
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $key=>$value) {
echo $key.' -- '.$value.'<br />';
}
見る
特に再帰関数には適しているようです。3 レベル以上の深さがある場合。
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
}
}
ネストされた 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";
}
}
すべての「part[n]」項目をループし、isset を使用してそれらが実際に存在するかどうかを確認できますか?
ここで何を言っているのか本当にわかりません。確かに、foreach ループのペアが必要なことを行いますか?
foreach($array as $id => $assoc)
{
foreach($assoc as $part => $data)
{
// code
}
}
それとも再帰的なものが必要ですか?データの例と、データをどのように返すかについてのコンテキストを教えていただければ、さらにお手伝いできると思います。
この多次元配列について考えてみましょう。この関数が役立つことを願っています。
$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
}
}
所属していません StackOverflow