所以我有这个数组。
Array
(
[0] => Array
(
[key_1] => something
[type] => first_type
)
[1] => Array
(
[key_1] => something_else
[type] => first_type
)
[2] => Array
(
[key_1] => something_else_3
[type] => second_type
)
[3] => Array
(
[key_1] => something_else_4
[type] => second_type
)
)
我必须按照这样的模式按类型值排序:
first_type
second_type
first_type
second_type
我的问题是,我该怎么做?
非常感谢!
答案 0 :(得分:6)
您需要将usort
与自定义比较功能结合使用,以比较每个项目的key_1
子键(您可以使用strcmp
方便地执行此操作)。假设您不想更改结果数组的结构,它看起来像这样:
$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });
答案 1 :(得分:0)
如果sort()
及其相关替代方案不起作用,则必须使用usort()
或uasort()
并使用自定义函数对此数组进行排序。
答案 2 :(得分:0)
所以我的工作方式如下:
function filter_by_value($array, $index, $value) {
if(is_array($array) && count($array) > 0) {
foreach(array_keys($array) as $key){
$temp[$key] = $array[$key][$index];
if ($temp[$key] == $value){
$newarray[$key] = $array[$key];
}
}
}
return $newarray;
}
$array = /* array here */
$type1 = array_values(filter_by_value($array, 'type', '1'));
$type2 = array_values(filter_by_value($array, 'type', '2'));
$i = 1; $x = 1; $y = 1;
$sorted = array();
foreach ($array as $a) {
if ($i % 2) {
$sorted[$i-1] = $type1[$x-1];
$x++;
} else {
$sorted[$i-1] = $type2[$y-1];
$y++;
}
$i++;
}
在php.net上找到filter_by_value(),但我不记得在哪里,那不是我做的。 也许这不是最好的解决方案,但它的工作非常好。