当前位置: 首页 > 知识库问答 >
问题:

如何基于另一个数组值而不是键对数组进行排序?

柴高岑
2023-03-14

我有这两个数组,我需要按ID订购第二个数组,就像第一个数组一样

如何根据第一个值重新订购第二个?我尝试了这个想法,但只适用于简单数组:https://develike.com/en/articles/sorting-an-array-by-values-based-on-another-array-in-php

有序ID数组:

Array
(
    [0] => 16351
    [1] => 18468
    [2] => 17160
    [3] => 1851
    [4] => 10734
    [5] => 18623
    [6] => 17813
    [7] => 14341
)

无序数组:

Array
(
    [0] => WP_Post Object
        (
            [ID] => 18623
            [post_author] => 57
         )
    [1] => WP_Post Object
        (
            [ID] => 18468
            [post_author] => 57
        )
      etc...

共有2个答案

徐阳炎
2023-03-14

您可以从循环键数组开始,它最终将包含有序值。

在keys数组循环中,为无序内容启动一个循环,对照无序键检查有序键,如果它们相同,则将有序数组值设置为无序值。

像这样的。

// $ordered_arr is the keys array
// $unordered_arr is the objects arrau

foreach ($ordered_arr as &$ordered_key) {
    foreach ($unordered_arr as $unordered_value) {
        // check if both unordered object id is equal to ordered key
        if ($unordered_value->ID == $ordered_key) {
            // set the object as value, we can do it this way because
            // $ordered_key is by referance
            $ordered_key = $unordered_value;
            break;
        }
    }
}
邓焱
2023-03-14
$arr = [ 16351, 18468, 17160, 1851, 10734, 18623, 17813, 14341 ];

class WP_Post {
  public $ID;
  public $post_author = 0;
  public function __construct($ID, $post_author = 0) {
    $this->ID = $ID;
    $this->post_author = $post_author;
  }
}

$arr2 = [
  new WP_Post(18623, 1),
  new WP_Post(18468, 2),
  new WP_Post(1851, 3),
  new WP_Post(14341, 4),
  new WP_Post(16351, 5),
  new WP_Post(17813, 6)
];

$result = array_filter(
  array_map(static fn($value) => array_values(
    array_filter($arr2, static fn($value2) => $value2->ID === $value)
  ), $arr)
);
 类似资料:
  • 问题内容: 在PHP中可以做这样的事情吗?您将如何编写函数?这是一个例子。顺序是最重要的。 我想做类似的事情 因为最后我使用了foreach()并且它们的顺序不正确(因为我将值附加到需要正确顺序的字符串中,而且我事先也不知道所有的数组键/值)。 我看过PHP的内部数组函数,但似乎只能按字母或数字排序。 问题答案: 只需使用或即可。通过以给定的数组(按正确的顺序)开始并用实际数组中的数据覆盖/添加键

  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 我想根据另一个数组(索引)的排序顺序迭代两个数组(A,B),在本例中是10、34、32、21。 为这里的坏例子道歉。我已经更新了索引数组以消除混乱。 预期投入产出 但是,如果我将最后一行末尾的indexes[s]更改为indexes[indexOrder.indexOf(s)]。排序将给出错误的结果。如果ArrayList的索引与其值相同,为什么indexOf(s)会给出与s不同的结果。

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 有没有更时髦的方法来解决这个问题?

  • 问题内容: 从这个问题的答案(使用一个较少的内存,沿着一个特定轴对另一个numpy数组进行排序)中,我学习了如何根据另一个numpy数组的值对多维numpy数组进行排序,而又不创建太多额外的数组。 但是,仅当数组和具有相同形状时才有效。我的数组是一维数组,但数组是ND数组(未指定N)。通过一维数组的值在特定轴上对数组进行排序是一种好方法(高效)吗? 问题答案: 使用与关键字参数: 如果要使用花式索