2012-03-25 79 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), 
    ... 
*/