PHP foreach-如何遍历未知元素



我有一个类似的数组:

$body = array(
"object" => "page",
"entry" => array(
"0" => array(
"id" => 153125381133,
"time" => 1438292065,
"changes" => array(
"0" => array(
"field" => "leadgen",
"value" => array(
"leadgen_id" => 123123123123,
"page_id" => 123123123,
"form_id" => 12312312312,
"adgroup_id" => 12312312312,
"ad_id" => 12312312312,
"created_time" => 1440120384
)
),
"1" => array(
"field" => "leadgen",
"value" => array(
"leadgen_id" => 123123123124,
"page_id" => 123123123,
"form_id" => 12312312312,
"adgroup_id" => 12312312312,
"ad_id" => 12312312312,
"created_time" => 1440120384
)
)
)
)
)
);

我想使用foreach循环来提取每个";leadgen_id";字段,但不知道如何遍历未知元素:

foreach ($body['entry'][THIS VALUE COULD BE 0 or 1 or 2...etc...]['changes'][THIS COULD BE 0 to 20]['value']['leadgen_id'] as $leadgenid)
{  code..... }

谢谢。

您可以为此使用递归。请参阅下面的片段以获取评论演示。这将输出:阵列(2({[0]=>int(123123123123([1] =>int(123123123124(}

function extractLeadgen($data, array &$leadgens):array
{
foreach ($data as $key => $value)
{
if (is_array($value))
{
// Recurse and descend into child array.
extractLeadgen($value, $leadgens);
}
else
{
// Reached non-array value. If its key is the column we want, record its value.
if ($key === 'leadgen_id')
// Adding to array by reference (&).
$leadgens[] = $value;
}
}
return $data;
}
$leadgens = [];
extractLeadgen($body, $leadgens);
var_dump($leadgens);
/*
Outputs:
array(2) {
[0]=>
int(123123123123)
[1]=>
int(123123123124)
}
*/

这会在上面重复出现:


$results = array();
function recurseandextract($thearray,&$res){

foreach($thearray as $key => $value){
if( is_array($thearray[$key]) ){
recurseandextract($thearray[$key],$res);
}elseif($key == "leadgen_id"){
array_push($res,$value);
}
}
}
recurseandextract($body,$results);
print serialize($results);

最新更新