【问题标题】:How do you sort an array based on how you sorted another array [duplicate]如何根据对另一个数组的排序方式对数组进行排序[重复]
【发布时间】:2021-04-14 18:55:38
【问题描述】:

我需要根据我对不同数组的排序方式对数组进行排序,这里有 2 个示例数组,它们根据它们的索引链接(因此 $array1[0] 和 $array2[0] 与彼此):

$array1 = Array (
    '2',
    '1',
    '3'
);

$array2 = Array (
    'linked_to_2',
    'linked_to_1',
    'linked_to_3',
);

如您所见,$array1[0] 与 $array2[0] 相关,$array1[1] 与 $array2[1] 相关,$array1[2] 与 $array2[2] 相关。

现在我创建一个新的,它使用与 $array1 相同的值,但顺序如下:

$sorted_array1 = Array (
    '1',
    '2',
    '3'
);

但是我不能使用相同的方法对 $array2 进行排序,那么如何使用 $array1 和/或 $sorted_array1 来使用 $array2 的值​​创建一个排序数组,如下所示:

$sorted_array2 = Array (
    'linked_to_1',
    'linked_to_2',
    'linked_to_3',
);

对于我的实际用例中的一些上下文,我在第一个数组中有几个 ID,我查询数据库并在具有这些 ID 的数据库表中按创建日期对它们进行排序(这是在该数据库表)。 array2 的值​​不在此数据库表中,因此不能以相同的方式排序。

【问题讨论】:

  • 你以前检查过这个问题吗? stackoverflow.com/q/348410/1066240
  • $array1 有唯一值吗?
  • @biesior 是的,我做到了,虽然问题很相似,但我无法从那里发布的答案中找到有效的解决方案
  • @nice_dev 是的,它们是订单系统的 ID,每一个都是唯一的,$array2 的值​​也是唯一的
  • @kevinfromspace 第一步是考虑 usort() 并创建 2 个关联数组以在排序期间做出顺序决策

标签: php arrays sorting


【解决方案1】:

我想通了!这有点作弊,因为我选择先将它们保存为关联数组([1] => 1、[2] => 2 等),但将其“转换”回普通数组并不难

$sorted_array2 = [];
$x = -1;
foreach($array1 as $arr1) {
    $x++;

    $newIndex = array_search($arr1, $sorted_array1);
    $sorted_array2[$newIndex] = $array2[$x]; 

}
ksort($sorted_array2);

$x 用于获取当前循环的“索引”。在每个循环开始时以 -1 和 $x++ 开始。

$newIndex 在 $sorted_array1 中找到 $array1 的当前循环值的某个索引并取该索引。

$sorted_array2[$newIndex] = $array2[$x] 将 $array2 的正确值放在 $sorted_array2 的同一索引处,使其与 $sorted_array1 保持链接。

ksort($sorted_array2) 对索引进行排序,当保存 $sorted_array2 时,它会按照它首先找到的任何顺序放置它们(例如,首先是 [2],然后是 [3],然后是 [1])。在 ksort 之后,两个数组再次通过索引链接起来。

感谢@nice_dev 给了我先制作关联数组的想法。 希望这对其他人也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2013-12-24
    • 2020-07-03
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多