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