2017-08-31 6 views
1

In meiner PHP-Datei habe ich 2 Arrays, in jedem sind die Schlüssel von 0 bis zu ihrem letzten Index nummeriert, und sie enthalten beide die gleiche Array-Elementnummer, da sie Daten enthalten derselbe Kontakt, aber jedes Array enthält unterschiedliche Daten über denselben Kontakt, und jeder Kontakt hat eine ID, die sein Index für das Array ist.Array-Elemente basierend auf anderen Array-Schlüsseln sortieren

Ich habe das erste Array nach den Werten absteigend sortiert, so dass die Schlüssel unterschiedlich sortiert sind und die Werte absteigend sind. Ich möchte das zweite Array auf die gleiche Weise sortieren, so dass sie die gleiche Schlüsselreihenfolge haben würden, und dann array_values auf beiden Arrays zu tun, um neue aufsteigende Schlüsselreihenfolge zu haben.

Zum Beispiel habe ich diese 2-Arrays:

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

I $arr2 absteigend nach seinen Werten wie folgt sortiert haben:

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

Ich möchte $arr1 auf die gleiche Art und Weise sortieren, so wird es auch sein:

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

Wie kann ich dies tun, damit die Arrays wi Werden Sie in der gleichen Schlüsselreihenfolge sortiert?

+0

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

+1

Warum ist die zugehörigen Daten in zwei separaten Arrays? –

+0

Es ist etwas unklar, was Ihr gewünschtes Ergebnis ist.Sie sagen, dass Sie wollen $ arr1 = array ('2' => '34', [3] => '23', [0] => '12', [1] => '8'); ', aber ich glaube nicht, dass das tatsächlich der Fall ist –

Antwort

1

Wie wäre es damit? array_replace() Mit:

<?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

So haben Sie zwei Arrays, warum also nicht nur eine Schleife über den zweiten Array und verwendet seine als Schlüssel, um ein neues Array mit dem den Werten aus der ersten Reihe zu erstellen ..

$newArray = array(); 

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

Dann einfach Ihr neues Array drucken $newArray Ihr Ergebnis zu überprüfen.

print_r($newArray) oder var_dump($newArray)

Erwartete Ausgabe wird:

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

Ebenso, wenn Sie eine entgegengesetzte wollen, dann wie weise $ arr2 mit $ arr1 nur ersetzen ändern.

$newArray = array(); 

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

Erwartete ausgegeben:

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

Wie wäre es array_multi_sort() mit? Es ordnet alle Arrays so an, dass sie der Reihenfolge des ersten sortierten Arrays entsprechen.

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

Live demo

Verwandte Themen