【发布时间】:2009-10-22 00:59:47
【问题描述】:
像 php 中的函数 usort 但如果两个成员比较相等,则它们的密钥应该相同。 例如: $arrayToSort = array(2,6,1,3,3);
排序后返回
array
1 => 1
2 => 2
3 => 3
3 => 3
4 => 6
【问题讨论】:
像 php 中的函数 usort 但如果两个成员比较相等,则它们的密钥应该相同。 例如: $arrayToSort = array(2,6,1,3,3);
排序后返回
array
1 => 1
2 => 2
3 => 3
3 => 3
4 => 6
【问题讨论】:
针对 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、2 => 2 和 3 => array(3,3)。
【讨论】:
你不能有两个相同的键。键是唯一的。
如果您尝试在代码中创建它,会发生以下情况。
$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
【讨论】:
你的例子没有意义。同一个数组中不能有两个相等的键。如果要对数组的值进行排序并保留它们的键,请使用asort()。或http://ca.php.net/manual/en/array.sorting.php 表中的任何功能,在“维护键关联”下说“是”。
【讨论】:
不确定是否有原生函数,但这个可能是你想要的。
<?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)
}
}
【讨论】: