array
1 => 1
2 => 2
3 => 3
3 => 3
4 => 6
答案 0 :(得分:2)
在回答meder的回答时,您使用的是in_array()
和array_push()
等慢速函数,而不是isset()
或[]
运算符等快速构造。您的代码应如下所示:
$arr = array(1,2,2,2,3);
$new = array();
foreach ($arr as $v)
{
$new[$v][] = $v;
}
// then you can sort the array if you wish
ksort($new);
请注意,您正在做的事情在某种程度上类似于PHP自己的array_count_values()
答案 1 :(得分:1)
数组中不能有两个具有相同键的元素。但是,您可以将两个三分组分成一个数组,以便1 => 1,2 => 2,和3 =>阵列(3,3)。
答案 2 :(得分:1)
你不能有两个相同的键。钥匙是独一无二的。
如果您尝试在代码中创建它,就会发生这种情况。
$data[1] = 1; // Assigns value 1 to key 1; 1 element in array
$data[2] = 2; // Assigns value 2 to key 2; 2 elements in array
$data[3] = 3; // Assigns value 3 to key 3; 3 elements in array
$data[3] = 3; // Reassigns value 3 to key 3; STILL 3 elements in array
$data[4] = 6; // Assigns value 6 to key 4; 4 elements in array
答案 3 :(得分:1)
你的例子没有意义。在同一个数组中不能有两个相等的键。如果要对数组的值进行排序并保留其键,请使用asort()
。或者http://ca.php.net/manual/en/array.sorting.php表中任何在“维持关键关联”下说“是”的功能。
答案 4 :(得分:0)
不确定是否有原生功能,但可能是你想要的。
<?php
$arr = array(1,2,2,2,3);
function arrayKeyJoin( $arr ) {
$newArr = array();
foreach ( $arr as $item ) {
if ( !in_array( $item, array_keys($newArr) ) ) {
$newArr[$item] = array();
}
array_push( $newArr[$item], $item );
}
return $newArr;
}
echo '<pre>', var_dump( arrayKeyJoin( $arr ) ), '</pre>';
输出:
array(3) {
[1]=>
array(1) {
[0]=>
int(1)
}
[2]=>
array(3) {
[0]=>
int(2)
[1]=>
int(2)
[2]=>
int(2)
}
[3]=>
array(1) {
[0]=>
int(3)
}
}