PHP array uasort



我有以下带有 php 的数组

// 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 后更新结果

Array
(
[2] => Array
(
[description] => axe
[value] => 99
)
[1] => Array
(
[description] => bord
[value] => 5
)
[0] => Array
(
[description] => some text
[value] => 20
)
)

如果我使用以下 uasort:

uasort($items, function($a, $b){
if($a['description'] == 'bord'){
return 1;  
} 
return -1;
});

结果是正确的,但我从未使用过$b。

通过返回 0,您告诉它不要理会 'bord' 项的位置,并且仅当它是比较中的第一个变量 ($a) 时。如果你想把它逼到底部,你需要告诉它如何在这两种情况下处理"无聊"。

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()在提供的数组中抓取两个相邻的元素,并将它们分配给$a和$b变量。当您的比较函数返回正数时,这意味着$a应该移动到比$b更低的位置。当它返回负数时,$a应大于$b。当它返回零时,$a 和 $b 相等。

如果我稍微简化您的数组以$items = ['some_text', 'bord', 'axe'];并运行类似的 uasort 函数,那么步骤将如下所示:

  1. bordsome text进行比较,结果 = 1

    新订单:['some_text', 'bord', 'axe']

  2. axebord进行比较,结果 = -1

    新订单:['some_text', 'axe', 'bord']

  3. some textaxe进行比较,结果 = 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' 的元素是最后一个。这意味着您认为它比其他元素"更大"。如果您认为$a更大,则必须返回 1,如果您认为$b更大,则必须返回 -1。

在这里,对于所有其他情况,我们返回 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);

对于较大的阵列,这可能会变慢

相关内容

  • 没有找到相关文章

最新更新