【问题标题】:Is it possible to usort a multidimensional array in PHP to be ordered by alternative values, i.e 1/0/1/0/1/0是否可以在 PHP 中对多维数组进行排序以按替代值排序,即 1/0/1/0/1/0
【发布时间】:2020-05-08 16:36:18
【问题描述】:

如果你有这个 PHP 数组:

$args = array(
    'a' => array(
        'order' => 1,
    ),
    'b' => array(
        'order' => 0,
    ),
    'c' => array(
        'order' => 0,
    ),
    'd' => array(
        'order' => 0,
    ),
    'e' => array(
        'order' => 1,
    ),
);

有没有办法使用 usort (或其他)方法,可以通过多维键的值对其进行排序,但不是“增量”(0,0,0,1,1),而是交替(0,1 ,0,1,0)。

因此以上面的数组为例,所需的顺序输出是键按备用“顺序”键值排序:

$args = array(
    'b' => array(
        'order' => 0,
    ),
    'a' => array(
        'order' => 1,
    ),
    'c' => array(
        'order' => 0,
    ),
    'e' => array(
        'order' => 1,
    ),
    'd' => array(
        'order' => 0,
    ),

);

简而言之;键现在按称为“order”的键的值排序 并且值交替,所以它们是:0, 1, 0, 1, 0。

我就是想不通这个!

【问题讨论】:

  • 您可能需要使用自定义回调来执行此操作。 See uasort
  • 替代值是什么意思?那是怎么排序的?
  • 查看所需的输出,您会注意到键按“order”键的值排序,但不是:0,0,0,1,1 - 所需的顺序是 0 ,1,0,1,0。
  • 您是否仍在寻找解决方案(无需排序)?如果1s 比0s 多 2+ 会发生什么,或者相反?是否应该将剩余的项目附加到末尾?
  • 是的,我正在寻找任何解决方案,重复值的顺序无关紧要,只要最终数组的键具有交替的“顺序”值(只能是 1 或 0 )。

标签: php sorting multidimensional-array usort


【解决方案1】:

不,这是不可能的。排序意味着您可以比较两个元素并确定它们应该具有的顺序。当您有两个 1 元素时,您的查询将失败。

但是,这并不意味着它不能通过算法完成,只是排序或排序不是适合这项工作的工具。

【讨论】:

猜你喜欢
  • 2023-01-20
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2019-03-13
  • 2019-08-10
  • 1970-01-01
  • 2019-12-23
  • 2019-12-03
相关资源
最近更新 更多