Array( [0] => Array ( [0] => Array ( [0] => Array ( [id] => 12 [name] => '1' ) [1] => Array ( [id] => 28 [name] => '2' ) ..... ) [1] => Array ( [0] => Array ( [id] => 121 [name] => '2' ) [1] => Array ( [id] => 281 [name] => '4' ) ... ) ) .... )
我想統計name對應的值出現的次數,
比如name='2'出現的次數是2
比如name='4'出現的次數是1
有什麼好的辦法嗎?
只能使用遍曆的話,如何效率最高?
可以使用外部工具:mysql,Memcache、redis。
回複內容:
Array( [0] => Array ( [0] => Array ( [0] => Array ( [id] => 12 [name] => '1' ) [1] => Array ( [id] => 28 [name] => '2' ) ..... ) [1] => Array ( [0] => Array ( [id] => 121 [name] => '2' ) [1] => Array ( [id] => 281 [name] => '4' ) ... ) ) .... )
我想統計name對應的值出現的次數,
比如name='2'出現的次數是2
比如name='4'出現的次數是1
有什麼好的辦法嗎?
只能使用遍曆的話,如何效率最高?
可以使用外部工具:mysql,Memcache、redis。
$result = array();array_walk_recursive($demo, function($value,$key) use(&$result){ if ($key == 'name') { $result[$value] += 1; }});print_r($result);
不知道能不能滿足你的需求。最終的數組中的key
==name
的值
首先,比較中意樓上的方法
其次,這個本身也可以通過遞迴函式的方式來實現
function doFind(array $demo, &$result) { foreach ($demo as $key => $value) { if (is_array($value)) { doFind($value, $result); } if ($key == 'name') { if (!isset($result[$value])) { $result[$value] = 1; } else { $result[$value]++; } } }}$ret = [];doFind($demo, $ret);var_dump($ret);
通過對數組進行遞迴判斷,進行值統計。