是否有一个 PHP 函数可以让您递归搜索数组并返回某个键“x”出现的实例数(无论多深)?
问问题
1175 次
4 回答
2
我会用array_walk_recursive()
. 例子:
$a = array(1,2,3,'x',array(4,5,'x',array(6,7,8,'x')));
$v = "x";
$i = 0;
array_walk_recursive($a, function($val, $key) use (&$i, $v) {
if ($val == $v) {
$i++;
}
});
echo $i;
输出:
3
于 2013-06-08T18:42:15.190 回答
1
您可以递归遍历数组(即不管深度),然后计算值:
$array = array(1, 2, 3, 'x', array(4, 5, 'x', array(6, 7, 8, 'x')));
$rit = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$xCount = 0;
foreach ($rit as $value) {
if ($value === 'x') {
$xCount++;
}
}
var_dump($xCount); # int(3)
一种变体是将此迭代再次转换为数组并计算值:
$array = array(1, 2, 3, 'x', array(4, 5, 'x', array(6, 7, 8, 'x')));
$rit = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$allCount = array_count_values(iterator_to_array($rit, FALSE));
print_r($allCount);
输出/结果:
Array
(
[1] => 1
[2] => 1
[3] => 1
[x] => 3
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 1
)
另见:
于 2013-06-08T19:15:25.660 回答
0
您可以编写一个简单的递归函数来执行您想要的操作。我没有对此进行测试,但这个想法是这样的:
$count = 0;
function findKey($array,&$count){
if(!empty($array)){
foreach($array as $key => $childArray){
if($key == 'keyImLookingFor'){
$count++;
}
findKey($childArray,$count);
}
}
}
然后 $count 应该包含您的关键出现次数。同样,这可能需要一些清理。
于 2013-06-08T18:48:45.440 回答
0
$array = array(
'key1' => 'val1',
'key2' => 'val2',
'key3' => array('key1' => 'val3'));
$count = 0;
function key_count($val, $key){
global $count;
if($key == "key1"){
$count++;
}
}
array_walk_recursive($array, 'key_count');
echo $count;
于 2013-06-08T18:51:26.840 回答