[英]PHP order array acording to another array values
我有兩個數組,一個數組包含字符串元素,另一個數組恰好具有這些元素應該位於的位置。 在第二個數組中,鍵表示位置,而值表示第一個數組中的值應該位於的位置。 但是我無法使它工作。 這是我到目前為止的代碼:
<?php
$array1= array("d","c","b","e","a");
$poss = array (3 ,2 ,1 ,4 ,0);
var_dump(orderArray($poss, $array1));
function orderArray($poss, $data){
$countPoss = count($poss);
$countData = count($data);
if ($countPoss === $countData){
for ($i=0; $i<$countData; $i++){
if($poss[$i]!==$i){
$aux = $data[$i];
$data = insertArrayIndex($data, $aux, $poss[$i]);
unset($data[$i]);
$data = array_values($data);
}
}
}else{
return FALSE;
}
return $data;
}
function insertArrayIndex($array, $new_element, $index) {
$start = array_slice($array, 0, $index);
$end = array_slice($array, $index);
$start[] = $new_element;
return array_merge($start, $end);
}
換句話說, $array1
應該根據$poss
進行組織。 例如: $array1
'中的第一個元素應該位於結尾處的位置3,而'a'應該位於位置0處。我已經嘗試了數百種方法,但是我無法弄清楚。
你可以嘗試使用array_combine
// since keys are aligned with words you can combine into single array
$merged_array = array_combine($poss, $array1);
// then sort array by keys and your words are in correct position
ksort($merged_array);
// update $array1 with sorted values
$array1 = array_values($merged_array);
如果您將此程序設計為練習,那么我希望您有耐心和好運!
但是,如果您在生產中需要此代碼,則最好使用PHP排序功能,而不要浪費時間。
使用array_combine()
創建一個具有$poss
作為鍵和$array1
作為值的新數組,然后使用ksort()
使用其鍵對該新數組進行排序:
$array1= array("d","c","b","e","a");
$poss = array (3 ,2 ,1 ,4 ,0);
$out1 = array_combine($poss, $array1);
ksort($out1);
print_r($out1);
使用函數array_multisort()
可以同時對$poss
和 $array1
進行排序。 array_multisort()
的第一個參數告訴順序,其他數組的值遵循第一個數組中值的移動:
$array1= array("d","c","b","e","a");
$poss = array (3 ,2 ,1 ,4 ,0);
array_multisort($poss, $array1);
print_r($array1);
兩種方法的輸出:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
這樣就可以獲得正確索引的數組
$newarray = array();
foreach($poss as $key => $value)
$newarray[$value] = $array1[$key];
var_dump($newarray);
以正確的索引和順序排列
$newarray = array();
for($i = 0; $i < count($poss); $i++) {
$newarray[] = $array1[array_search($i, $poss)];
}
var_dump($newarray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.