有更好的方法来过滤关联数组吗



尝试对数组进行排序,以显示肉类别名称为数组中第一个元素的组。有没有比运行两个for循环更好的方法来对这个数组进行排序?我的阵列看起来像这个

Array
(
[0] => Array
(
[categoryId] => C4ye95zr403cx9wqi11eo
[categoryName] => set
[categoryStatus] => true
)
[1] => Array
(
[categoryId] => Cj-v2b7szu3jpph1rvu03
[categoryName] => meat
[categoryStatus] => true
)

我想按categoryName==meat重新排列数组,使其成为数组中的第一个元素。

目前我只是运行两个循环来完成这项工作。

$temp = array();
foreach($array as $k => $v)
{
if($v['categoryName']=="meat")
{
$temp[]     = $menu[$k];
$setEmpty   = false;
unset($array[$k]);
}
}
foreach($menu as $k=>$v)
{
$temp[] = $array[$k];
}

您可以使用usort:

usort($array, function ($element) {
return $element['categoryName'] === 'meat' ? 0 : 1;
});

文档说明了有关回调的以下内容:

如果第一个参数被认为分别小于、等于或大于第二个参数,则比较函数必须返回一个小于、等于、或大于零的整数。

因此,为了将meat类别推到开头,您所需要做的就是说其他一切都比它大。

你可以检查小提琴进行测试。

最新更新