如何将具有特定属性的项目移动到 PHP 数组的顶部


How can I move an item with a specific property to the top of a PHP array

我有一个关联数组,如下所示:

   {
      "album_6":{
        "name":"02-04-2014",
        "id":6,
        "count":"2",
        "cover":"26974771533c4b57cb0aa"
      },
      "album_3":{
        "name":"Photos of you",
        "id":3,
        "count":"4",
        "cover":"8872935615302242c4fa6c",
        "of_you":true
      }
    }

您的数组可以包含许多项目,但其中一个项目将具有额外的属性of_you

在上面的例子中,它是album_3

我想将具有 of_you 属性的项目移动到数组中的第一个位置。 我怎样才能做到这一点?

我尝试使用带有比较功能的usort,但它似乎不起作用。

注意:该项目可以是任何数字索引。

答:

发布这个问题后,我直接找到了答案。 解决方案如下:

  uasort($albums, function($a, $b) {
      return (empty($a['of_you'])) ? 1 : -1;
  });

如果有人有更快/更有效的方法。 请将其作为答案发布,我会接受。

编辑:为了维护关联键asort()在这种情况下是更好的选择

即使它对你不起作用,usort是这样的:

usort($array, function($a, $b) {
    $hasA = array_key_exists('of_you', $a);
    $hasB = array_key_exists('of_you', $b);
    if ($hasA and $hasB) {
        return 0;
    }
    return $hasA ? -1 : 1;
});

请记住,它不会比首先使用键of_you元素进行排序,然后再对其余元素进行排序。