【问题标题】:php array sorting on child elementphp数组对子元素进行排序
【发布时间】:2023-06-11 14:57:01
【问题描述】:

我正在尝试根据 first [0] 子元素对数组进行排序。但在我的代码中,键被排序中的数组编号替换:

$myArray = array(
    'my last row' => array(  
         '0' => 'ZZZZ',
         '1' => 'AAAA'
     ),
     'the first row' => array(
         '0' => 'AAAA'
     )
  );
usort($myArray, 'cmp' ) ;

var_dump($myArray);

function cmp    ($a, $b)        {
        return ( ( $a[0] > $b[0] ) ? 1 : -1 );
}

结果:

array(2) {
  [0]=>       // should be ['the first row']  *not* [0]
  array(1) {
    [0]=>
    string(4) "AAAA"
  }
  [1]=>        // should be ['my last row']  *not* [1]
  array(2) {
    [0]=>
    string(4) "ZZZZ"
    [1]=>
    string(4) "AAAA"
  }
}

排序顺序本身似乎按预期工作。

我希望看到以下内容:

the first row  => AAAA
my last row   =>  ZZZZ, AAAA

这可能是一个非常简单的问题,但我无法解决。

非常感谢。

编辑:这种排序不涉及键本身,而是一个子元素键。我相信这让这个问题变得独一无二。

【问题讨论】:

  • “不要惊慌”关于使用“uasort”的建议效果很好,但他似乎删除了他的答案。如果你想再把它放在那里,我很荣幸选择它作为正确的。
  • @edwardsmarkf 我发现我认为是重复的内容后删除了它。老实说,对我来说,它仍然看起来像复制品。也许再看看那个?他们的比较功能是不同的,但主要的一点是他们有同样的问题,没有保留密钥。
  • 不要惊慌——你是对的,它是重复的,抱歉。但是您的解决方案效果很好。可悲的是,我发现这会对性能造成巨大影响,所以我正在考虑在客户端进行排序。

标签: php arrays sorting associative-array


【解决方案1】:

试试这个: 它将维护您的索引关联。

$myArray = array(
'my last row' => array(  
     '0' => 'ZZZZ',
     '1' => 'AAAA'
 ),
 'the first row' => array(
     '0' => 'AAAA'
 )

); asort($myArray);

print_r($myArray);

Array ( [第一行] => Array ( [0] => AAAA ) [我的最后一行] => Array ( [0] => ZZZZ [1] => AAAA ) )

【讨论】:

    最近更新 更多