2012-03-25 122 views
0

我想要做的是我創建php數組動態。我不知道數組中的元素。可以說我有數組這樣如何切片php陣列

$mix_array =array('1','3','6','1','5','3','6','5','1','7','3','9'); 

我想這array.i的切片想從上面的數組,但共同的元素創建數組一樣

$array_1 = ('1','1','1'); 
$array_2 = ('3','3','3'); 
$array_3 = ('6','6'); 
$array_4 = ('5','5'); 
$array_5 = ('9'); 
$array_6 = ('7'); 

是先找到原共同要素陣列,並從其他陣列

+0

array_slice(),試圖交叉但不足夠好 – 2012-03-25 20:44:30

回答

2

有幾種如何做到這一點,這裏是一個例子(順便說一下,效率很低,但如果是短時間工作就足夠了):

<?php 
$mix_array = array('1','3','6','1','5','3','6','5','1','7','3','9'); 
$sliced_array = array(); 

foreach($mix_array as $k => $v) { 
    if(count($sliced_array[$v]) > 0) { 
     array_push($sliced_array[$v], $v); 
    } else { 
     $sliced_array[$v] = array($v); 
    } 
} 
?> 

你應該看看http://es.php.net/manual/en/ref.array.php

2

更好地使反向陣列,而不是打字$array_1,$array_2。而不是讓與像array('1', '1', '1')相同的值數組,你可以只保留價值的金額一樣array('1' => 3)

$mix_array = array ('1','3','6','1','5','3','6','5','1','7','3','9'); 
$group_array = array(); 
foreach ($mix_array as $value) { 
    if(isset($group_array[$value])) { 
     $group_array[$value]++; 
    } 
    else { 
     $group_array[$value] = 1; 
    } 
} 

print_r($group_array); 

結果

Array 
(
[1] => 3 
[3] => 3 
[6] => 2 
[5] => 2 
[7] => 1 
[9] => 1 
) 

或者作爲喬希說乾脆用array_count_values()

+2

一個土生土長的功能已經存在了這一點,['array_count_values($ ARR)'](HTTP:// PHP。淨/手動/ EN/function.array-計數values.php)。 – Josh 2012-03-25 20:48:33

+0

@Josh謝謝+) – safarov 2012-03-25 20:51:24

1

您可以使用array_count_values此:

$array = array_count_values($mix_array); 
/* $array will have the following content: 
    $array{ 
     1 => 3 
     3 => 3 
     6 => 2 
    ... 
*/ 

如果你真的需要切片版本,那麼你可以使用array_fill

$result = array(); 
$i = 0; 
for($array as $key=>$value) 
    $result[$i++] = array_fill(0,$value,$key); 
/* $result[0] = (1,1,1), 
    $result[1] = (3,3,3), 
    ... 
*/