基于另一个数组的多维数组的php usort
我遵循这个思路 我想根据另一个一维数组对二维数组进行排序 我要排序的数组基于另一个数组的多维数组的php usort,php,arrays,sorting,Php,Arrays,Sorting,我遵循这个思路 我想根据另一个一维数组对二维数组进行排序 我要排序的数组 $main = array(array('name' => 'terry', 'age' => '25', 'sex' => 'm', 'status' => 'active'), array('name' => 'raul', 'age' => '26', 'sex' => 'm', 'status' => 'active'), array(
$main = array(array('name' => 'terry', 'age' => '25', 'sex' => 'm', 'status' => 'active'),
array('name' => 'raul', 'age' => '26', 'sex' => 'm', 'status' => 'active'),
array('name' => 'mata', 'age' => '27', 'sex' => 'm', 'status' => 'active'),
array('name' => 'ronaldo', 'age' => '28', 'sex' => 'm', 'status' => 'active'),
array('name' => 'drogba', 'age' => '29', 'sex' => 'm', 'status' => 'active'),
array('name' => 'messi', 'age' => '30', 'sex' => 'm', 'status' => 'active'));
顺序数组
$order = array('30','25');
function cmp(array $a, array $b) {
global $order;
return array_search($a['age'], $order) - array_search($b['age'], $order);
}
usort($main, 'cmp');
这就是我正在尝试的功能。但它并没有对数组进行排序
所需输出:我希望获得年龄值为30和25的数组,作为输入二维数组中的前两个数组
我可以用这个代码来做
function cmp(array $a, array $b) {
global $order;
foreach ($order as $ord) {
if (in_array($ord, $a)) {
return true;
}
}
}
但是我想避免foreach循环尝试以下方法:
$inArray = array(30, 25);
uasort($main, function($a, $b) use ($inArray){
$aAge = $a['age'];
$bAge = $b['age'];
$aWeight = 0;
$bWeight = 0;
if (in_array($aAge, $inArray))
$aWeight++;
if (in_array($bAge, $inArray))
$bWeight++;
if ($aWeight != $bWeight) {
return $aWeight > $bWeight ? -1 : 1;
} else if ($aWeight > 0) {
// need to sort by order which specified in array
$aIndex = array_search($aAge, $inArray);
$bIndex = array_search($bAge, $inArray);
return ($aIndex == $bIndex ? 0 : ($aIndex > $bIndex ? 1 : -1));
} else {
// just compare age values
return ($aAge == $bAge ? 0 : ($aAge > $bAge ? 1 : -1));
}
});
试试这个:
$inArray = array(30, 25);
uasort($main, function($a, $b) use ($inArray){
$aAge = $a['age'];
$bAge = $b['age'];
$aWeight = 0;
$bWeight = 0;
if (in_array($aAge, $inArray))
$aWeight++;
if (in_array($bAge, $inArray))
$bWeight++;
if ($aWeight != $bWeight) {
return $aWeight > $bWeight ? -1 : 1;
} else if ($aWeight > 0) {
// need to sort by order which specified in array
$aIndex = array_search($aAge, $inArray);
$bIndex = array_search($bAge, $inArray);
return ($aIndex == $bIndex ? 0 : ($aIndex > $bIndex ? 1 : -1));
} else {
// just compare age values
return ($aAge == $bAge ? 0 : ($aAge > $bAge ? 1 : -1));
}
});
那么30和25排在第一位,其余阵列的预期顺序是什么?@Michael:原始顺序So 30和25排在第一位,其余阵列的预期顺序是什么?@Michael:原始顺序