【问题标题】:Sort multiple separate PHP arrays and keep keys in sync对多个单独的 PHP 数组进行排序并保持键同步
【发布时间】:2015-07-25 20:56:49
【问题描述】:

我有三个使用相同键同步的数组,我需要 natsort 并将 array_values() 应用于 array1,同时保持 array2 和 array3 与 array_values() 为 array1 设置的新键同步。

我环顾四周,找不到任何用于在对其中一个进行排序后保持多个数组键同步的方法。提前感谢您对此问题的任何帮助。

-- array1 (unsorted)
Array (
  0 => OA.3,
  1 => OA.8,
  2 => OA.6,
  3 => OA.2,
)

-- array2 (unsorted)
Array (
  0 => 4,
  1 => 1,
  2 => 5,
  3 => 3,
)

-- array3 (unsorted)
Array (
  0 => 3,
  1 => 1,
  2 => 5,
  3 => 0,
)

-- array1 (natsorted)
Array (
  3 => OA.2,
  0 => OA.3,
  2 => OA.6,
  1 => OA.8,
)

-- array_values(natsort(array1))
Array (
  0 => OA.2,
  1 => OA.3,
  2 => OA.6,
  3 => OA.8,
)

--- needed result for array2/array3 ---
-- array2 (keys matching array1)
Array (
  0 => 3,
  1 => 4,
  2 => 5,
  3 => 1,     
)

-- array3 (keys matching array1)
Array (
  0 => 0,
  1 => 3,
  2 => 5,
  3 => 1,
)

在对 array1 进行 natsort() 和 array_values() 排序期间,是否有某种方法可以使所有这三个数组保持同步? array2 和array3 的最终结果显示了与array1 的排序和re-keying 的最终结果匹配的新键。

对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你想要什么作为最终输出?我无法理解您的问题。
  • @Viral 抱歉,我刚刚更新了 OP。重新阅读帖子后意识到这有点令人困惑。让我知道它是否更好
  • 是的,现在更好了,由于var_export(),而不是print_r(),也发布了array1、2和3
  • @Viral ok 刚刚也将输出更改为 var_export()
  • 我觉得我需要手动执行此操作并以某种方式准备 natsort 与键的顺序并将它们存储在临时变量中以将它们应用于其他 2 个数组但我什至无法理解它.而且我对 php 不是最好的,所以我什至不知道是否可以读取 natsort 的顺序并存储这些数字和它们的实际键,以便在不破坏其他 2 个数组的情况下应用它们

标签: php arrays sorting key sync


【解决方案1】:

您可以在natsort之后使用数组A的键,对数组B和C进行排序......示例:

<?PHP
function pre($a) { echo '<pre>'; print_r( $a ); echo '</pre>'; }
$a = array(
  0 => 'OA.3',
  1 => 'OA.8',
  2 => 'OA.6',
  3 => 'OA.2'
);
$b = array (
  0 => '4',
  1 => '1',
  2 => '5',
  3 => '3'
);
$c = array (
  0 => 3,
  1 => 1,
  2 => 5,
  3 => 0,
);
pre( $a );
natsort( $a );
pre( $a );
foreach( $a AS $key => $var ) {
    $bb[] = $b[ $key ];
    $cc[] = $c[ $key ];
}
echo '$bb:<br />';
pre( $bb );
echo '$cc:<br />';
pre( $cc );
?>

您可以在排序完成后对数组 $a、$bb 和 $cc 应用 array_values()。

注意:pre只是打印数组的中间部分,没有其他功能。

【讨论】:

  • 这看起来非常优雅且易于阅读,我会尝试几次,如果一切正常,我会将其标记为已接受。谢谢
【解决方案2】:

这是我的解决方案,你可以对$required_array3做同样的事情

$required_array2 = array();

foreach ($your_array2 as $key => $value)
{
    $k = array_search($value, $your_array1); // Original array [unsorted]
    $required_array2[$k] = $value;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    相关资源
    最近更新 更多