根据另一个数组的键对数组元素进行排序

时间:2017-08-31 17:11:50

标签: php arrays string sorting key

在我的PHP文件中,我有2个数组,每个数组的键从0到最后一个索引编号,它们都包含相同的数组元素编号,因为它们包含同一个联系人的数据,但每个数组包含关于同一联系人的不同数据,每个联系人都有一个ID,这是他在阵列上的索引。

我已根据值对第一个数组进行了降序排序,因此键的排序不同,值也在降序。我想以相同的方式对第二个数组进行排序,因此它们将具有相同的键顺序,然后在两个数组上执行array_values,以便它具有新的升序键顺序。

例如,我有这两个数组:

$arr1 = array('0' => 'John', '1' => 'George', '2' => 'James', '3' => 'Harry');
$arr2 = array('0' => '12', '1' => '8', '2' => '34', '3' => '23');

我根据他的值将$arr2降序排序:

arsort($arr2);
// So now, $arr2 is "[2] => '34', [3] => '23', [0] => '12', [1] => '8'"

我想以同样的方式对$arr1进行排序,因此它也将是:

$arr1 = array('2' => '34', [3] => '23', [0] => '12', [1] => '8');

如何执行此操作以使数组按相同的键顺序排序?

3 个答案:

答案 0 :(得分:2)

这个怎么样?使用array_replace()

<?php
$arr1 = array('0' => 'John', '1' => 'George', '2' => 'James', '3' => 'Harry');
$arr2 = array('0' => '12', '1' => '8', '2' => '34', '3' => '23');
arsort($arr2);
var_dump(array_replace($arr2, $arr1)); // array(4) { [2]=> string(5) "James" [3]=> string(5) "Harry" [0]=> string(4) "John" [1]=> string(6) "George" }

Demo

答案 1 :(得分:0)

如何使用array_multi_sort()?它重新排列所有数组以匹配第一个排序数组的顺序。

// as elements of $arr2 are shifted, corresponding elements of $arr1 will have the same shift
array_multisort($arr2, SORT_DESC, $arr1);

Live demo

答案 2 :(得分:-1)

所以你有两个数组,所以为什么不循环遍历第二个数组并使用它作为键顺序来使用第一个数组中的值创建一个新数组..

$newArray = array();

foreach (array_keys($arr2) as $key) {
    $newArray[$key] = $arr1[$key];
}
// then apply sorting to new array
arsort($newArray);

然后只需打印新阵列$newArray即可查看结果。

print_r($newArray)var_dump($newArray)

预期输出将是:

array(4) {
  [0]=>
  string(4) "John"
  [2]=>
  string(5) "James"
  [3]=>
  string(5) "Harry"
  [1]=>
  string(6) "George"
}

同样如果你想要相反,那么改变只需用$ arr1替换$ arr2就好了。

$newArray = array();

foreach (array_keys($arr1) as $key) {
    $newArray[$key] = $arr2[$key];
}
// then apply sorting to new array
arsort($newArray);
var_dump($newArray)`

预期输出将是:

array(4) {
  [2]=>
  string(2) "34"
  [3]=>
  string(2) "23"
  [0]=>
  string(2) "12"
  [1]=>
  string(1) "8"
}