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