Ich habe ein Array wie dieses:
$row_arr_1=array(7,9,5,10);
Jetzt möchte ich das Ergebnisarray wie folgt erhalten:
$row_arr_2=array(3,2,4,1);
Erläuterung:
Da 10
der größte Wert in row_arr_1
ist, wird er durch den Wert 1 ersetzt.
Da 9
der zweithöchste Wert von row_arr_1
ist, wird er durch 2 usw. ersetzt.
Ich habe versucht, die Werte von row_arr_1
zu sortieren, aber die Position wurde geändert.
Wie kann ich mein gewünschtes Ergebnis erzielen?
4 Antworten
Dies kann mit rsort () und array_search ()
$row_arr_1=array(7,9,5,10);
$row_copy = $row_arr_1;
$row_arr_2 = array();
rsort($row_copy);
foreach($row_arr_1 as $val) {
$row_arr_2[] = array_search($val, $row_copy) + 1;
}
print_r($row_arr_2);
Sie können arsort()
verwenden, um das Array unter Beibehaltung der Schlüssel zu sortieren. und verwenden Sie diese Schlüssel für Ihr Array über array_keys()
:
$row_arr_1 = array(7,9,5,10);
$row_arr_1_backup = $row_arr_1;
arsort($row_arr_1_backup);
$row_arr_2 = array_keys($row_arr_1_backup);
asort($row_arr_2);
$row_arr_2 = array_keys($row_arr_2);
array_walk($row_arr_2, function(&$item, &$key) {
$item = $item + 1;
});
Sie müssen das ursprüngliche Array duplizieren, da arsort das tatsächliche Array sortiert, auf das es zeigt, anstatt ein neues Array zurückzugeben.
$row_arr_1_old = array(7, 9, 5, 10);
$row_arr_1 = array(7, 9, 5, 10);
rsort($row_arr_1);
$test = [];
foreach ($row_arr_1_old as $key => $value) {
$test[] = array_search($value, $row_arr_1);
}
print_r($test);
Versuchen Sie für eine optimale Effizienz, die Gesamtzahl der Funktionsaufrufe zu reduzieren. Dies bedeutet insbesondere, dass iterierte Funktionsaufrufe minimiert / eliminiert werden.
Dies ist meine etwas effizientere Version von Ahsans Antwort.
Code: (Demo)
$copy = $arr = [7, 9, 5, 10];
rsort($arr); // generates: [10, 9, 7, 5]
$flipped = array_flip($arr); // generates: [10 => 0, 9 => 1, 7 => 2, 5 => 3]
foreach($copy as $v) {
$result[] = ++$flipped[$v]; // adds one to each accessed value from $flipped
}
var_export($result);
Ausgabe:
array (
0 => 3,
1 => 2,
2 => 4,
3 => 1,
)
Verwandte Fragen
Neue Fragen
php
PHP ist eine weit verbreitete, übergeordnete, dynamische, objektorientierte und interpretierte Skriptsprache, die hauptsächlich für die serverseitige Webentwicklung entwickelt wurde. Wird für Fragen zur PHP-Sprache verwendet.