PHP数组排序
我用php创建了以下数组PHP数组排序,php,arrays,compare,Php,Arrays,Compare,我用php创建了以下数组 // array stored in $items Array ( [0] => Array ( [description] => some text [value] => 20 ) [1] => Array ( [descripti
// array stored in $items
Array
(
[0] => Array
(
[description] => some text
[value] => 20
)
[1] => Array
(
[description] => bord
[value] => 5
)
[2] => Array
(
[description] => axe
[value] => 99
)
)
我想要的是bord的描述是最后一个元素。我知道php有uasort函数来编写自己的自定义排序函数
我试过的方法如下
uasort($items, function($a, $b){
if($a['description'] == 'bord'){
return 0;
}
return ($a['description'] < $b['description']) ? -1 : 1;
});
如果我使用以下uasort:
uasort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;
}
return -1;
});
结果是正确的,但我从未使用过$b。通过返回0,您告诉它不要使用“bord”项目的位置,并且仅当它是比较中的第一个变量($a)时。如果你想把它压到底,你需要告诉它如何治疗这两种情况下的“bord”
uasort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;
}
if ($b['description'] == 'bord') {
return -1;
}
return ($a['description'] < $b['description']) ? -1 : 1;
});
uasort($items,function($a,$b){
如果($a['description']=='bord'){
返回1;
}
如果($b['description']=='bord'){
返回-1;
}
报税表($a['description']<$b['description'])?-1:1;
});
编辑:为了进一步解释,uasort()
获取所提供数组中相邻的两个元素,并将它们分配给$a和$b变量。当您的比较函数返回一个正数时,它意味着$a应该移动到低于$b的位置。当它返回负数时,$a应高于$b。当它返回零时,$a和$b相等
如果我将数组简化为$items=['some_text','bord','axe']
并运行类似的uasort函数,然后步骤如下所示:
bord
与某些文本进行比较,结果=1
新订单:['some_text','bord','axe']
axe
与bord
进行比较,结果=-1
新订单:['some_text','axe','bord']
某些文本
与axe
进行比较,结果=1
新订单:['axe','some_text','bord']
最后一个是最终结果。返回0时,您是在告诉它不要处理“bord”项的位置,并且仅当它是比较中的第一个变量($a)时。如果你想把它压到底,你需要告诉它如何治疗这两种情况下的“bord”
uasort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;
}
if ($b['description'] == 'bord') {
return -1;
}
return ($a['description'] < $b['description']) ? -1 : 1;
});
uasort($items,function($a,$b){
如果($a['description']=='bord'){
返回1;
}
如果($b['description']=='bord'){
返回-1;
}
报税表($a['description']<$b['description'])?-1:1;
});
编辑:为了进一步解释,uasort()
获取所提供数组中相邻的两个元素,并将它们分配给$a和$b变量。当您的比较函数返回一个正数时,它意味着$a应该移动到低于$b的位置。当它返回负数时,$a应高于$b。当它返回零时,$a和$b相等
如果我将数组简化为$items=['some_text','bord','axe']
并运行类似的uasort函数,然后步骤如下所示:
bord
与某些文本进行比较,结果=1
新订单:['some_text','bord','axe']
axe
与bord
进行比较,结果=-1
新订单:['some_text','axe','bord']
某些文本
与axe
进行比较,结果=1
新订单:['axe','some_text','bord']
最后一个是最终结果。
uasort
用于关联数组,但数组不是这样。您应该改用usort
usort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;
}
if($b['description'] == 'bord'){
return -1;
}
return 0;
});
工作原理:您希望最后一个元素是description
='bord'。这意味着你认为它比其他元素更大。如果你考虑一个更大的,你必须返回1,而如果你考虑B大一点,你需要返回1。p>
在这里,对于所有其他情况,我们返回0,这意味着它们的顺序将保持不变
uasort
用于关联数组,但您的数组并非如此。您应该改用usort
usort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;
}
if($b['description'] == 'bord'){
return -1;
}
return 0;
});
foreach($items as $key => $thing) {
if(in_array("bord",$key[description])) {
//set aside
$last_description=$key[description];
$last_value=$key[value];
}
$new_array[]=array("description"=>$key[description],"value"=>$key[value];
} //now, add it back on
$new_array[]=array("description"=>$last_description,"value"=>$last_value);
工作原理:您希望最后一个元素是description
='bord'。这意味着你认为它比其他元素更大。如果你考虑一个更大的,你必须返回1,而如果你考虑B大一点,你需要返回1。p>
在这里,对于所有其他情况,我们返回0,这意味着它们的顺序将保持不变
foreach($items as $key => $thing) {
if(in_array("bord",$key[description])) {
//set aside
$last_description=$key[description];
$last_value=$key[value];
}
$new_array[]=array("description"=>$key[description],"value"=>$key[value];
} //now, add it back on
$new_array[]=array("description"=>$last_description,"value"=>$last_value);
如果阵列较大,速度可能会变慢
如果在较大的数组中使用var_导出,并使用我们可以复制/粘贴到副本的结果更新问题,这可能会变慢。添加了一些更新,在使用print_rIf打印后,在数组中使用var_导出,并使用我们可以复制/粘贴到副本的结果更新问题。添加了一些更新,在使用print_rThx打印后,这是可行的,但仍然无法了解$a和$b与1、-1和0的关系。你能试着更深入地解释一下吗?Thx这是可行的,但仍然不知道$a和$b与1、-1和0的关系。你能试着更深入地解释一下吗?如果我理解正确的话,当文本而不是数字的键我需要使用uasort,但现在它们是数字,所以用usort代替吗?uasort保留键。这不一定只适用于关联数组,因为您可能希望项目也保留其数字键。因此,如果我理解正确,当文本而非数字的键需要使用uasort时,但现在它们是数字,因此usort?uasort保留键。它不一定只适用于关联数组,因为您可能希望项目也保留其数字键。