【问题标题】:sort multidimensional array in php by key of inner array通过内部数组的键对php中的多维数组进行排序
【发布时间】:2012-11-13 06:58:37
【问题描述】:

我想按时间戳“1357894278”对职位进行排序

<?php
foreach( $jobs as &$job )
{
    $cj_date[] =  array( strtotime($job->date) => array( $job->title ));
}

foreach ($results['results'] as $result)
{
    $in_date[] = array ( strtotime($result['date']) => array ($result['jobtitle']) );
}

$ans[] = array_merge($cj_date,$in_date);

foreach($ans as $a)  
{
    ksort($a);
    print_r($a);
}
?>

通过运行这个脚本,我得到如下输出:

Array( [0] => Array
              ( [1352796106] => Array 
                                ( [0] => JobTitle_1 )
              )
       [1] => Array
              ( [1352745201] => Array 
                                ( [0] => JobTitle_2 )
              )
       [2] => Array
              ( [1357894278] => Array 
                                ( [0] => JobTitle_3 )
              )
      )

那么如何按 1352796106、1352745201、1357894278 对 Job-Titles 进行排序 谢谢! 等待帮助

【问题讨论】:

    标签: php api sorting multidimensional-array ksort


    【解决方案1】:

    试试这个:

    function compare($a, $b) {
        $ak = array_keys($a);
        $bk = array_keys($b);
        return ($ak[0] < $bk[0]) ? -1 : 1;
    }
    
    usort($ans, "compare");
    var_dump($ans);
    

    usort 按自定义比较函数排序。

    【讨论】:

    • 在输出中它首先显示了关于第一个 API 和另一个 API 的所有结果。
    【解决方案2】:

    不久前我遇到了类似的问题。我的结构要复杂得多。我最终创建了另一个数组作为我的“地图”,并将其用于排序/索引。

    新的地图数组是一个非常简单的结构,只包含关于我的其他结构的必要信息,只是足够的信息来快速索引和快速排序。

    我确信可能还有其他解决方案,但这对我有用,因为我有非常大的复杂结构,如果我没有额外的地图结构,迭代的成本会更高。这一切都取决于您计算您的时间成本,并根据数据类型的复杂性和大小确定它对您来说是否会变得昂贵。

    【讨论】:

    • 你能给我你的地图数组的例子吗?因为我正在处理通过 API 获得的结果,所以我无法按任何索引名称(如 $ans['date'])对其进行排序。
    • 在您的情况下,我所做的将与此类似:Array([jobTitle1]=&gt;0, [jobtitle2]=&gt;1)。所以基本上它是一个索引数组,说明 jobtite1 实际上是原始数组中的第 0 项。
    • Wahab Mirjan 感谢您的帮助。但现在我得到了解决方案。我只是在数组合并中犯了一个错误。
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2016-01-24
    • 2012-06-10
    • 1970-01-01
    • 2021-12-27
    • 2012-11-15
    相关资源
    最近更新 更多