2014-07-14 33 views
-5

所以我有一個數組 array (1, 2, 2, 5, 4, 5, 4, 1, 1, 5)我需要收集相同的數組值並將其分成不同的數組。所以在這個陣列之後,我應該有4個不同的陣列:PHP - 收集相同的數組值

array (1, 1, 1) 
array (2, 2) 
array (5, 5, 5) 
array (4, 4) 

什麼是最好的辦法呢?

+2

看看'array_count_values()',應該讓你幾乎有:HTTP:// PHP。 net/manual/en/function.array-count-values.php – jeroen

回答

3
$result = []; 
foreach (array_count_values($values) as $value => $occurrence) { 
    $result[] = array_fill(0, $occurrence, $value); 
} 

這假定個體價值認同不要緊,即你沒有對象,它們的單個實例需要。

雖然我不確定爲什麼你需要特定的數組格式,然後擺在首位。只需使用array_count_values的結果即可。

+0

謝謝,非常舒適的解決方案 – user3744738

2
$input = array (1, 2, 2, 5, 4, 5, 4, 1, 1, 5); 
$output = array(); 

foreach ($input as $value) 
    $output[$value][] = $value; 

var_dump($output) 
2

您可以製作另一個數組,其中不同的值作爲數組鍵。

<?php 

$array = array(1, 2, 2, 5, 4, 5, 4, 1, 1, 5);  
$result = array(); 

foreach ($array as $val) { 
    if (!isset($result[$val])) { // Check if the index exists 
     $result[$val] = array(); 
    } 

    $result[$val][] = $val; 
} 

print_r($result); 
0

你可以嘗試像下面

<?php 
    $a = array (1, 2, 2, 5, 4, 5, 4, 1, 1, 5); 
    $a = array_count_values($a); 
    $arr = array(); 
    foreach($a as $k=>$v){ 
     for($i = 0; $i < $v; $i++){ 
      $arr[$k][] = $k; 
     } 
    } 
    print_r($arr); 
?> 

輸出:

Array 
(
[1] => Array 
    (
     [0] => 1 
     [1] => 1 
     [2] => 1 
    ) 

[2] => Array 
    (
     [0] => 2 
     [1] => 2 
    ) 

[5] => Array 
    (
     [0] => 5 
     [1] => 5 
     [2] => 5 
    ) 

[4] => Array 
    (
     [0] => 4 
     [1] => 4 
    ) 

)