具有不同属性的PHP usort集合
我有两个相同的数组:具有不同属性的PHP usort集合,php,arrays,sorting,Php,Arrays,Sorting,我有两个相同的数组: $array1 = array( array( 'start' => 1, 'value' => 10 ), array( 'start' => 8, 'value' => 4 ), array( 'start' => 4, 'value' => 8 ), array( '
$array1 = array(
array(
'start' => 1,
'value' => 10
),
array(
'start' => 8,
'value' => 4
),
array(
'start' => 4,
'value' => 8
),
array(
'value' => 5,
)
);
$array2 = array(
array(
'start' => 1,
'value' => 10
),
array(
'start' => 8,
'value' => 4
),
array(
'start' => 4,
'value' => 8
),
array(
'value' => 5,
)
);
我需要按升序对它们进行合并和排序:
$array1 = array_merge($array1, $array2);
usort($array1, function($value1, $value2) {
if (!array_key_exists('start', $value1) || !array_key_exists('start', $value2)) {
return 0;
}
return $value1['start'] - $value2['start'];
});
但是,这不起作用,并且顺序不正确:
Array
(
[0] => Array
(
[start] => 4
[start] => 8
)
[1] => Array
(
[start] => 8
[value] => 4
)
[2] => Array
(
[amount] => 5
)
[3] => Array
(
[start] => 1
[value] => 10
)
[4] => Array
(
[value] => 5
)
[5] => Array
(
[start] => 1
[value] => 10
)
[6] => Array
(
[start] => 4
[value] => 8
)
[7] => Array
(
[start] => 8
[value] => 4
)
)
理想情况下,它应该将所有不带start
属性的项放在数组的开头,并将所有带start
属性的项按升序放在后面
如果我删除了不包含
start
属性的数组,它似乎工作得很好。但是我需要保留那些没有start
属性的项目。我可以用我的排序来解决这个问题,而不必经过合并数组,删除那些没有start
的数组并在排序后替换它们吗?理想情况下,我很想了解这里发生了什么导致它失败。要在前面放置没有开始键的元素,您必须在比较函数中对它们进行不同的处理
你可以试试这样的
usort($array1, function($value1, $value2) {
if (!isset($value1['start']) && !isset($value2['start'])) {
return 0;
} else if (!isset($value1['start'])) {
return -1;
} else if (!isset($value2['start'])) {
return 1;
}
return $value1['start'] - $value2['start'];
});
要在前面放置没有开始键的元素,必须在比较函数中对其进行不同的处理 你可以试试这样的
usort($array1, function($value1, $value2) {
if (!isset($value1['start']) && !isset($value2['start'])) {
return 0;
} else if (!isset($value1['start'])) {
return -1;
} else if (!isset($value2['start'])) {
return 1;
}
return $value1['start'] - $value2['start'];
});
你是说任何没有
start
条目的东西都等于一切。你是说任何没有start
条目的东西都等于一切。