2016-12-31 87 views
0

這裏我有一個數組。這是它:如何計算多維數組中的相同值?

Array (Array (
    'name' => 'bmw', 
    'id' => 1 
), Array (
    'name' => 'toyota', 
    'id' => 1 
),Array ( 
    'name' => 'tata', 
    'id' => 2 
),Array ( 
    'name' => 'bajaj', 
    'id' => 3 
),Array (
    'name' => 'kawasaki', 
    'id' => 3 
), Array (
    'name' => 'tvs', 
    'id' => 3 
),Array (
    'name' => 'mitsubishi', 
    'id' => 2 
) 
); 

,應該是旁邊給我造成的ID碼是什麼1 => 2項,ID 2 => 2項和ID 3 => 3項? 我試過array_count_values(),它不適合我。

回答

0

根據文檔array_count_values只適用於字符串和整數。你可以使用它,但首先你應該用id提取一個列。從PHP 5.5開始,它非常簡單,只需調用一個名爲array_column的函數即可。

$list = array (Array (
    'name' => 'bmw', 
    'id' => 1 
), Array (
    'name' => 'toyota', 
    'id' => 1 
),Array ( 
    'name' => 'tata', 
    'id' => 2 
),Array ( 
    'name' => 'bajaj', 
    'id' => 3 
),Array (
    'name' => 'kawasaki', 
    'id' => 3 
), Array (
    'name' => 'tvs', 
    'id' => 3 
),Array (
    'name' => 'mitsubishi', 
    'id' => 2 
) 
); 

$results = array_count_values(array_column($list, 'id')); 
0

也許有一個更好的解決方案,但這應該工作。假設你的數組保存在$arr中。

$countItemsById = []; 

foreach($arr as $data){ 
    $countItemsById[ $data['id'] ]++; 
} 

此代碼執行以下操作: 首先,它正在創造一個新的Array $countItemsById。 之後,它會循環處理現有陣列,並將index (key)中具有id值的新陣列中的值增加1。

之後,$countItemsById看起來就像這樣:

Array (1 => 2, 2 => 2, 3 => 3) 
0

循環您的陣列,計算每個ID的occerence。

<?php 
$list = array (Array (
    'name' => 'bmw', 
    'id' => 1 
), Array (
    'name' => 'toyota', 
    'id' => 1 
),Array (
    'name' => 'tata', 
    'id' => 2 
),Array (
    'name' => 'bajaj', 
    'id' => 3 
),Array (
    'name' => 'kawasaki', 
    'id' => 3 
), Array (
    'name' => 'tvs', 
    'id' => 3 
),Array (
    'name' => 'mitsubishi', 
    'id' => 2 
) 
); 

$results = []; 
array_walk($list, function($v) use(&$results){ 
    $results[$v['id']]++; 
}); 
var_dump($results); 

輸出:

array(3) { 
    [1]=> 
    int(2) 
    [2]=> 
    int(2) 
    [3]=> 
    int(3) 
}