Php 是否基于类似数组对数组进行排序?

Php 是否基于类似数组对数组进行排序?,php,arrays,Php,Arrays,我有两个数值索引数组,它们的键数相同,值相似但不相同$无序具有无序数据,而数组$ordered具有正确顺序的数据。我想按照与$ordered相同的顺序对$unordered进行排序,但将百分比值保留在方括号中,而不是$unordered $无序: [0] => "Horse [1%]" [1] => "Cat [5%]" [2] => "Dog [94%]" 订购:$ [0] => "Cat" [1] => "Horse" [2] => "Dog" 谢谢。

我有两个数值索引数组,它们的键数相同,值相似但不相同$无序具有无序数据,而数组$ordered具有正确顺序的数据。我想按照与$ordered相同的顺序对$unordered进行排序,但将百分比值保留在方括号中,而不是$unordered

$无序:

[0] => "Horse [1%]"
[1] => "Cat [5%]"
[2] => "Dog [94%]"
订购:$

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

谢谢。

usort
是您在处理像示例这样的复杂问题时的go to sorting函数

试试这样的。基本上,它解析
$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);
});

演示:

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

演示:

虽然火箭危险品看起来更好,但你可能理解这一点

 $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;
$array=array();
$array[]=“马[5%]”
$array[]=“Cat[1%]”;
$array[]=“Dog[99%]”;
$ordered=array();
$ordered[]=“Cat”;
$ordered[]=“Horse”;
$ordered[]=“Dog”;
$var=”“;
$a=数组填充(0,计数($ordered),“”);
对于($i=0;$i
虽然火箭危险品看起来更好,但你可能理解这一点

 $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;
$array=array();
$array[]=“马[5%]”
$array[]=“Cat[1%]”;
$array[]=“Dog[99%]”;
$ordered=array();
$ordered[]=“Cat”;
$ordered[]=“Horse”;
$ordered[]=“Dog”;
$var=”“;
$a=数组填充(0,计数($ordered),“”);
对于($i=0;$i
这是什么关系?我在这里没有看到任何公分母。我想他希望
$undernored
具有与
$ordered
数组设置的相同顺序。顺序是什么?字母顺序不对。信数不对。那么你是如何排序的呢?@Ohgodwhy:我想他想按照
$ordered
中的值的顺序排序,
$ordered
$ordered是随机排序的-不是字母顺序或字母计数-所以这就是为什么我想知道是否有办法按$ordered排序$unordered而不是按字母顺序排序$unordered/等等关系我在这里没有看到任何公分母。我想他希望
$undernored
具有与
$ordered
数组设置的相同顺序。顺序是什么?字母顺序不对。信数不对。那么你是如何排序的呢?@Ohgodwhy:我想他想按照
$ordered
中的值的顺序排序,
$ordered
$ordered是随机排序的-不是字母顺序或字母计数-这就是为什么我想知道是否有办法按$ordered排序$unordered而不是按字母顺序排序$unordered/等等写类似的东西的过程。这个例子对我很有用+1.对于偶发值,[%]前面可能有多个空格,例如大型动物[56%]。有没有办法修改explode语句,使它们不只是查看第一组字符?很抱歉,在我尝试实现它时遇到了这个问题。@user3600400:A(俗气的)解决方案是改为执行
explode('[',$A)
。这似乎有效。否则,您必须使用正则表达式。我将
$aVal
$bVal
更新为
$aVal=explode('[',$A);
$bVal=explode('[',$b)
这似乎有效。仅更改$aVal不起作用。谢谢!不客气。是的,我应该提到更改a和b:-)只是在编写类似的内容。此示例对我有效。+1.对于偶尔的值,[%]前面可能有多个空格,例如大型动物[56%]。有没有办法修改explode语句,使它们不只是查看第一组字符?很抱歉,在我尝试实现它时遇到了这个问题。@user3600400:a(俗气的)解决方案是执行
explode(“[”,$a)
相反。这似乎有效。否则,您必须使用正则表达式。我将
$aVal
$bVal
更新为
$aVal=explode('[',$a);
$bVal=explode('[',$b)
这似乎很有效。仅更改$aVal不起作用。谢谢!不客气。是的,我应该提到更改a和b:-)