我有一个多维数组,例如:
$array = array(
array('test'=>23, 'one'=>'etc' , 'blah'=>'blah'),
array('test'=>123, 'one'=>'etc' , 'blah'=>'blah'),
array('test'=>33, 'one'=>'etc' , 'blah'=>'blah'),
);
如何在数组中搜索所有键'test'并获取值?我希望在数组中添加'test'的所有值,所以它会以'214'为例。数组应该是任何深度,但无论如何都是关键。
答案 0 :(得分:5)
处理递归数组。
$array = array(
array('test' => 23, 'one' => array("a" => "something", "test" => 28), 'blah' => array("test" => 21)),
array('test' => 123, 'one' => 'etc' , 'blah' => 'blah'),
array('test' => 33, 'one' => 'etc' , 'blah' => 'blah'),
);
function recursiveSum($array, $keyToSearch) {
$total = 0;
foreach($array as $key => $value) {
if(is_array($value)) {
$total += recursiveSum($value, $keyToSearch);
}
else if($key == $keyToSearch) {
$total += $value;
}
}
return $total;
}
$total = recursiveSum($array, "test");
答案 1 :(得分:4)
class Sum { public $total = 0; }
$sum = new Sum;
array_walk_recursive($array, 'add_test', $sum);
function add_test($item, $key, $sum) {
if ($key == 'test') {
$sum->total += $item;
}
}
print $sum->total;
为什么有Sum
对象?因为否则你必须使用全局变量计算总数,这可以,但可能是凌乱的。对象通过引用传递。您可以使用该对象来控制搜索键或其他任何键。
答案 2 :(得分:1)
$total = 0;
function crawl( $array ) {
global $total;
if( is_array( $array ) ) {
foreach( $array as $key=>$val ) {
if( $key === "test" ) {
$total = $total + $val;
}
crawl( $val );
}
}
return $total;
}
任何深度。