Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对多个单独的PHP数组进行排序并保持键同步_Php_Arrays_Sorting_Key_Sync - Fatal编程技术网

对多个单独的PHP数组进行排序并保持键同步

对多个单独的PHP数组进行排序并保持键同步,php,arrays,sorting,key,sync,Php,Arrays,Sorting,Key,Sync,我有三个与同一个键同步的数组,我需要对array1进行natsort并将array2和array3应用于array1,同时保持array2和array3与array1通过ArrayU值()设置的新键同步 我环顾四周,在对其中一个数组键进行排序后,找不到任何用于保持多个数组键同步的方法。提前感谢您对这个问题的任何帮助 -- array1 (unsorted) Array ( 0 => OA.3, 1 => OA.8, 2 => OA.6, 3 => OA.2

我有三个与同一个键同步的数组,我需要对array1进行natsort并将array2和array3应用于array1,同时保持array2和array3与array1通过ArrayU值()设置的新键同步

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

-- 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排序和重新设置关键帧的最终结果相匹配的新关键帧


在此方面的任何帮助都将不胜感激。谢谢。

您可以在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应用数组_值()


注意:pre仅用于打印阵列的中间部分,没有其他功能。

这是我的解决方案,您可以对
$required\u array3执行相同的操作


您想要什么作为最终输出?我在理解你的问题时遇到问题。@很抱歉,我刚刚更新了OP。在重新阅读该帖子后,我意识到它有点混乱。让我知道它是否更好,现在更好,也发布数组1、2和3,因为
var\u export()
,而不是
print\u r()
@Viral ok刚刚将输出更改为var\u export()对你来说,我也觉得我需要手动完成这项工作,并以某种方式准备natsort的顺序和键,并将它们存储在临时变量中,以将它们应用到其他2个数组中,但我甚至无法理解这一点。我不是php的高手,所以我甚至不知道是否有可能读取natsort的顺序并存储这些数字和它们的实际键,以便在不破坏其他2个数组的情况下应用它们。这看起来非常优雅且易于阅读,我将尝试几次,如果一切顺利,我会将其标记为接受。非常感谢。
$required_array2 = array();

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