如何在php中以这种方式对数组进行排序

时间:2009-10-22 00:59:48

标签: php sorting

像php中的函数usort一样 但如果两个成员比较相同,他们的关键应该是相同的。 例如: $ arrayToSort = array(2,6,1,3,3);

排序返回后

array
  1 =>  1
  2 =>  2
  3 =>  3
  3 =>  3
  4 =>  6

5 个答案:

答案 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)
  }
}