2017-08-31 150 views
1

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

我已经排序的第一个数组降序根据值,所以键是在不同的排序,并且值是降序。我想以同样的方式对第二个数组进行排序,以便它们具有相同的按键顺序,然后在两个数组上执行array_values,以便它们具有新的升序按键顺序。

比如我有这2个数组:

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

我该怎么做,所以阵列无线将按照相同的键顺序排序?

+0

http://php.net/manual/en/function.array-multisort.php –

+1

为什么是两个独立的数组这个相关的数据? –

+0

有些不清楚你想要的结果是什么。你说你想要'$ arr1 = array('2'=>'34',[3] =>'23',[0] =>'12',[1] =>'8');',但我不认为这实际上是这种情况 –

回答

1

这个怎么样?使用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

所以,你有两个数组,那么为什么不只是第二阵列上环,并使用它作为一个键顺序使用从第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" 
} 
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

相关问题