我有2个数组索引的数组具有相同数量的键和相似但不相同的值。 $ unordered具有无序数据,而array $ ordered具有正确顺序的数据。我想按照与$ ordered相同的顺序排序$ unordered,但是将百分比值保存在$ unordered的方括号中。
$无序:
[0] => "Horse [1%]"
[1] => "Cat [5%]"
[2] => "Dog [94%]"
$下令:
[0] => "Cat"
[1] => "Horse"
[2] => "Dog"
感谢。
答案 0 :(得分:3)
usort
是您的首选排序函数,就像您的示例这样复杂的事情。
尝试这样的事情。基本上,它会解析$unordered
中的值,然后在$ordered
数组中搜索它。
usort($unordered, function($a, $b) use($ordered){
$aVal = explode(' ', $a);
$bVal = explode(' ', $b);
return array_search($aVal[0], $ordered) - array_search($bVal[0], $ordered);
});
答案 1 :(得分:2)
虽然Rocket Hazmats看起来更好,但更好,但你可以理解这个
$array = array();
$array[] = "Horse [5%]"
$array[] ="Cat [1%]";
$array[] ="Dog [99%]";
$ordered = array();
$ordered[] = "Cat";
$ordered[] = "Horse";
$ordered[] = "Dog";
$var = "";
$a = array_fill(0, count($ordered), '');
for($i = 0; $i < count($array); $i++){
preg_match("/[a-zA-z]+/", $array[$i], $var);
for($j = 0; $j < count($ordered); $j++){
if($var[0] == $ordered[$j]) $a[$j] = $array[$i];
}
}
return $a;