Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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_String_Sorting_Key - Fatal编程技术网

Php 基于另一个数组对数组元素进行排序';钥匙

Php 基于另一个数组对数组元素进行排序';钥匙,php,arrays,string,sorting,key,Php,Arrays,String,Sorting,Key,在我的PHP文件中,我有两个数组,每个数组中的键从0到最后一个索引编号,它们都包含相同的数组元素编号,因为它们包含同一联系人的数据,但每个数组包含关于同一联系人的不同数据,每个联系人都有一个ID,该ID是其在数组中的索引 我已经根据值对第一个数组进行了降序排序,因此键的排序不同,值也在降序。我想以同样的方式对第二个数组进行排序,使它们具有相同的键顺序,然后对两个数组执行array\u value,以使其具有新的升序键顺序 例如,我有以下两个阵列: $arr1 = array('0' =>

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

我已经根据值对第一个数组进行了降序排序,因此键的排序不同,值也在降序。我想以同样的方式对第二个数组进行排序,使它们具有相同的键顺序,然后对两个数组执行
array\u value
,以使其具有新的升序键顺序

例如,我有以下两个阵列:

$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');

如何才能使数组按相同的键顺序排序?

这样如何?使用
数组\u replace()


既然有两个数组,为什么不直接循环第二个数组并使用其作为键顺序,使用第一个数组中的值创建一个新数组呢

$newArray = array();

foreach (array_keys($arr2) as $key) {
    $newArray[$key] = $arr1[$key];
}
// then apply sorting to new array
arsort($newArray);
然后只需打印新数组
$newArray
,即可检查结果

print\u r($newArray)
var\u dump($newArray)

预期产出将是:

array(4) {
  [0]=>
  string(4) "John"
  [2]=>
  string(5) "James"
  [3]=>
  string(5) "Harry"
  [1]=>
  string(6) "George"
}
array(4) {
  [2]=>
  string(2) "34"
  [3]=>
  string(2) "23"
  [0]=>
  string(2) "12"
  [1]=>
  string(1) "8"
}
类似地,如果您想要一个相反的值,那么就用$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) {
  [0]=>
  string(4) "John"
  [2]=>
  string(5) "James"
  [3]=>
  string(5) "Harry"
  [1]=>
  string(6) "George"
}
array(4) {
  [2]=>
  string(2) "34"
  [3]=>
  string(2) "23"
  [0]=>
  string(2) "12"
  [1]=>
  string(1) "8"
}
使用如何?它会重新排列所有数组以匹配第一个排序数组的顺序

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

为什么这些相关的数据被放在两个不同的数组中?我们不太清楚您想要的结果是什么。你说你想要
$arr1=array('2'=>'34',[3]=>'23',[0]=>'12',[1]=>'8'),但我不认为这是真正的问题case@PatrickQ我想他指的是
array(4){[2]=>string(5)“James”[3]=>string(5)“Harry”[0]=>string(4)“John”[1]=>string(6)“George”}
,他没有更改值。@ishegg我也这么认为,但我不想假设/猜测