【问题标题】:PHP nested array sorting [duplicate]PHP嵌套数组排序[重复]
【发布时间】:2014-04-20 10:37:26
【问题描述】:

我需要通过show_name ASC和DESC对下面的数组进行排序,我尝试了stackoverflow网站上建议的许多方法,但到目前为止没有运气,请帮助

$mainArray:

[78] => Array ( 
[main] => Array ( 
    [season_num] => 1 
    [episode_name] => Workflow 1 
    [episode_num] => 2 
    [show_id] => 15 
    [show_name] => Workflow Test 
    [type] => 
    [by_promo] => 
    [promo_type] => 
    [status] => I 
    [terminated] => ) 
    [approved] => Array ( 
    [asset] => on 
    [promo] => 
    [ingest] => 
    [review] => 
    [editing] => 
    [quality_control] => 
    [mcr] => 
    [archive] => ) 

    [notes] => Array ( 
        [promo] => 
        [ingest] => 
        [review] => 
        [editing] => 
        [quality_control] => 
        [mcr] => 
        [archive] => 
        [terminated] => )

    [file_path] => Array ( 
        [ingest] => 
        [editing] => ) 
        [priority] => 2 
        [work_type] => 0 
        [c_breaks] => 
        [editing_staff] => Array (
        [assigned_to] => 
        [assigned_from] => 21 ) 
        [asset] => Array ( 
        [date] => 1394828762 
        [user] => 26 
        [fullname] => User 2 ) 

    [ingest] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [promo] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [review] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [editing] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [quality_control] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [mcr] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [archive] => Array ( 
        [date] => 
        [user] => 
        [fullname] => ) 

    [status] => pending ) 


[79] => Array ( 
    [main] => Array ( 
        [season_num] => 2 [episode_name] => Doctor Who test [episode_num] => 4 [show_id] => 14 [show_name] => Doctor Who [type] => [by_promo] => [promo_type] => [status] => I [terminated] => ) [approved] => Array ( [asset] => on [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => ) [notes] => Array ( [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => [terminated] => ) [file_path] => Array ( [ingest] => [editing] => ) [priority] => 2 [work_type] => 0 [c_breaks] => [editing_staff] => Array ( [assigned_to] => [assigned_from] => 21 ) [asset] => Array ( [date] => 1394828776 [user] => 26 [fullname] => User 2 ) [ingest] => Array ( [date] => [user] => [fullname] => ) [promo] => Array ( [date] => [user] => [fullname] => ) [review] => Array ( [date] => [user] => [fullname] => ) [editing] => Array ( [date] => [user] => [fullname] => ) [quality_control] => Array ( [date] => [user] => [fullname] => ) [mcr] => Array ( [date] => [user] => [fullname] => ) [archive] => Array ( [date] => [user] => [fullname] => ) [status] => pending ) 

[80] => Array ( 
    [main] => Array ( 
        [season_num] => 4 [episode_name] => Spooks Test [episode_num] => 6 [show_id] => 11 [show_name] => Spooks [type] => [by_promo] => [promo_type] => [status] => I [terminated] => ) [approved] => Array ( [asset] => on [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => ) [notes] => Array ( [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => [terminated] => ) [file_path] => Array ( [ingest] => [editing] => ) [priority] => 2 [work_type] => 0 [c_breaks] => [editing_staff] => Array ( [assigned_to] => [assigned_from] => 21 ) [asset] => Array ( [date] => 1394828792 [user] => 26 [fullname] => User 2 ) [ingest] => Array ( [date] => [user] => [fullname] => ) [promo] => Array ( [date] => [user] => [fullname] => ) [review] => Array ( [date] => [user] => [fullname] => ) [editing] => Array ( [date] => [user] => [fullname] => ) [quality_control] => Array ( [date] => [user] => [fullname] => ) [mcr] => Array ( [date] => [user] => [fullname] => ) [archive] => Array ( [date] => [user] => [fullname] => ) [status] => pending ) 

[81] => Array ( 
    [main] => Array ( 
        [season_num] => 6 [episode_name] => Anc test [episode_num] => 8 [show_id] => 19 [show_name] => Anc Test [type] => [by_promo] => [promo_type] => [status] => I [terminated] => ) [approved] => Array ( [asset] => on [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => ) [notes] => Array ( [promo] => [ingest] => [review] => [editing] => [quality_control] => [mcr] => [archive] => [terminated] => ) [file_path] => Array ( [ingest] => [editing] => ) [priority] => 2 [work_type] => 0 [c_breaks] => [editing_staff] => Array ( [assigned_to] => [assigned_from] => 25 ) [asset] => Array ( [date] => 1394829087 [user] => 26 [fullname] => User 2 ) [ingest] => Array ( [date] => [user] => [fullname] => ) [promo] => Array ( [date] => [user] => [fullname] => ) [review] => Array ( [date] => [user] => [fullname] => ) [editing] => Array ( [date] => [user] => [fullname] => ) [quality_control] => Array ( [date] => [user] => [fullname] => ) [mcr] => Array ( [date] => [user] => [fullname] => ) [archive] => Array ( [date] => [user] => [fullname] => ) [status] => pending ) 

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

要通过内键对数组进行排序,通常可以使用 usort 函数。

在这种情况下,您的代码将如下所示。

编辑:看起来你需要另一个级别。试试这个。

usort($array, function ($a, $b) { return $b['main']['show_name'] < $a['main']['show_name']; });

要查看此代码的运行情况,您可以在此处查看https://ideone.com/Mmv1gV

请记住,这实际上会修改数组的值。 请参阅http://php.net/usort 了解更多信息。

我发现的另一个可能有用的链接, sorting array based on inner-array key-value

【讨论】:

  • 感谢您的建议,但我尝试了包括您在内的许多 usort 方法,但仍然无效。
  • @ancogenli 这对我有用,我已经用运行 PHP 代码的链接编辑了我的答案。
  • 在您的示例中有两个嵌套数组,在我的问题中有 3 个嵌套数组,这可能是问题所在,但对我仍然不起作用
  • 您的结构有两个直到您要排序的部分...[78] =&gt; Array ( [main] =&gt; Array ( [season_num] =&gt; 1 [episode_name] =&gt; Workflow 1 [episode_num] =&gt; 2 [show_id] =&gt; 15 [show_name] =&gt; Workflow Test .. 可能您执行排序不正确?即使是这样,只需将另一部分添加到下一个数组的排序函数中?
  • 编辑了我的答案,试试吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多