基于类似的数组对数组进行排序?

时间:2014-08-27 19:12:39

标签: php arrays

我有2个数组索引的数组具有相同数量的键和相似但不相同的值。 $ unordered具有无序数据,而array $ ordered具有正确顺序的数据。我想按照与$ ordered相同的顺序排序$ unordered,但是将百分比值保存在$ unordered的方括号中。

$无序:

[0] => "Horse [1%]"
[1] => "Cat [5%]"
[2] => "Dog [94%]"

$下令:

[0] => "Cat"
[1] => "Horse"
[2] => "Dog"

感谢。

2 个答案:

答案 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);
});

DEMO:https://eval.in/184201

答案 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;