对多个单独的 PHP 数组进行排序并保持键同步
Sort multiple separate PHP arrays and keep keys in sync
我有三个数组与同一个键同步,我需要 natsort 并将 array_values() 应用于 array1,同时保持 array2 和 array3 与 [=20 为 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 的排序和重新键入的最终结果匹配的新键。
如有任何帮助,我们将不胜感激。谢谢。
你可以在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只是打印数组的中间部分,没有其他作用
这是我的解决方案,您可以对 $required_array3
执行相同的操作
$required_array2 = array();
foreach ($your_array2 as $key => $value)
{
$k = array_search($value, $your_array1); // Original array [unsorted]
$required_array2[$k] = $value;
}
我有三个数组与同一个键同步,我需要 natsort 并将 array_values() 应用于 array1,同时保持 array2 和 array3 与 [=20 为 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 的排序和重新键入的最终结果匹配的新键。
如有任何帮助,我们将不胜感激。谢谢。
你可以在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只是打印数组的中间部分,没有其他作用
这是我的解决方案,您可以对 $required_array3
$required_array2 = array();
foreach ($your_array2 as $key => $value)
{
$k = array_search($value, $your_array1); // Original array [unsorted]
$required_array2[$k] = $value;
}