2014-07-14 4 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 
    ) 

) 
Смежные вопросы