在PHP中迭代复杂关联数组
有没有一种简单的方法可以在PHP中迭代这种结构的关联数组: 数组在PHP中迭代复杂关联数组,php,arrays,associative-array,Php,Arrays,Associative Array,有没有一种简单的方法可以在PHP中迭代这种结构的关联数组: 数组$searches具有编号索引,包含4到5个关联部分。因此,我不仅需要通过$searches[n]对$searches[0]进行迭代,还需要通过$searches[n][“part0”]进行迭代。困难的部分是不同的索引有不同数量的部分(有些可能缺少一个或两个) 想用一种漂亮、整洁、易懂的方式来做这件事吗?你应该能够使用嵌套的foreach语句 从 您可以循环所有“part[n]”项并使用isset查看它们是否确实存在吗?嵌套两个:
$searches
具有编号索引,包含4到5个关联部分。因此,我不仅需要通过$searches[n]
对$searches[0]
进行迭代,还需要通过$searches[n][“part0”]
进行迭代。困难的部分是不同的索引有不同数量的部分(有些可能缺少一个或两个)
想用一种漂亮、整洁、易懂的方式来做这件事吗?你应该能够使用嵌套的foreach语句 从
您可以循环所有“part[n]”项并使用isset查看它们是否确实存在吗?嵌套两个:
我真的不知道你在这里指的是什么-一对foreach循环确实满足了你的需要吗
foreach($array as $id => $assoc)
{
foreach($assoc as $part => $data)
{
// code
}
}
或者你需要一些递归的东西?我可以在示例数据和您希望返回数据的上下文方面提供更多帮助。看起来是递归函数的好地方,尤其是在深度超过两个级别的情况下
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
}
}
我知道这是一个关于亡灵术的问题,但是使用Spl迭代器在多维数组上进行迭代很容易
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $key=>$value) {
echo $key.' -- '.$value.'<br />';
}
$iterator=new recursiveiterator(new recursivearrayiiterator($array));
foreach($key=>$value的迭代器){
回显$key.'-'.$value.
;
}
看
- 考虑一下这个多维数组,我希望这个函数会有所帮助
$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
}
}
$n=array('customer'=>array('address'=>'Kenmore street'),
“电话”=>“121223”),
“消费者”=>“惠灵顿消费者”,
'employee'=>array('name'=>array('fname'=>'finau','lname'=>'kaufusi'),
“年龄”=>32岁,
“国籍”=>“汤加”)
);
迭代器($n);
函数迭代器($arr){
foreach($arr作为$key=>$val){
if(is_数组($val))迭代器($val);
回显“key:”.$key.|值:”.$val.”;
//在此处筛选$key和$val并执行所需操作
}
}
$i和$values是来自关联数组的复制临时变量,还是它们引用了实际数组引用?@MMAmail.com:此代码不使用引用,而是使用副本。如果你真的想使用引用(但你通常不这么做!),你需要在变量名前加上符号AND,也就是说,&$i
和&$values
在它们的声明中,您应该取消设置循环后的变量。如果其中一个数组元素是可迭代对象,会发生什么?您知道如何将其从迭代中排除吗?,所以只有数组被迭代?@Petah将迭代器包装到一个filterierator中,该filterierator检查accept()方法中的is_对象。
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $key=>$value) {
echo $key.' -- '.$value.'<br />';
}
$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
}
}