PHP - 按特定值关联数组的排序阵列
问题描述:
我正在寻找一种方法来按特定值关联数组,我不确定这是否可能。我尝试了array_multisort()
和usort()
的功能,但我担心我无法得到它。PHP - 按特定值关联数组的排序阵列
实施例:
$array[] = array('id' => 74215, 'type' => 'BOX');
$array[] = array('id' => 76123, 'type' => 'UNT');
$array[] = array('id' => 71231, 'type' => '');
$array[] = array('id' => 79765, 'type' => 'UNT');
$array[] = array('id' => 77421, 'type' => 'BOX');
如果我想通过 'BOX'命令,那么该阵列将是:
Array (
[0] => Array
(
[id] => 77421
[type] => 'BOX'
)
[1] => Array
(
[id] => 74215
[type] => 'BOX'
)
[2] => Array
(
[id] => 76123
[type] => 'UNT'
)
.
.
.
我能通过其它字符串如 'UNT',和为了像那样。 这可能吗?
答
我假设你想通过字符串匹配进行“排序”,首先匹配那个字符串的所有人,然后是所有那些不匹配的人。除非你有一个古老的PHP版本,这可能是工作:
$sortvalue = 'BOX';
usort($array, function($a, $b) use ($sortvalue) {
if($a['type'] == $sortvalue) return -1;
elseif($b['type'] == $sortvalue) return 1;
else return 0;
});
本应该把任何“盒子”进入你的阵列前端。
如果所有其他人都应该分组,而不是return 0
做return $a['type'] < $b['type']
。
编辑:综合卡迈勒朋友的建议/校正
答
我不知道如果PHP有它自己的函数,这样做,但我写我自己,希望它有助于:
function sortArray($array_x, $key)
{
$added_indexes;
$new_array;
for($i=0;$i<count($array_x);$i++)
{
if($array_x[$i]['type']==$key){
$new_array[]=$array_x[$i];
$added_indexes[]=$i;
}
}
for($i=0;$i<count($array_x);$i++)
{
if(!in_array($i,$added_indexes))
{
$new_array[]=$array_x[$i];
}
}
return $new_array;
}
所以当你这样做:
$array[] = array('id' => 74215, 'type' => 'BOX');
$array[] = array('id' => 76123, 'type' => 'UNT');
$array[] = array('id' => 71231, 'type' => '');
$array[] = array('id' => 79765, 'type' => 'UNT');
$array[] = array('id' => 77421, 'type' => 'BOX');
print_r(sortArray($array,"BOX"));
给出了这样的:
Array
(
[0] => Array
(
[id] => 74215
[type] => BOX
)
[1] => Array
(
[id] => 77421
[type] => BOX
)
[2] => Array
(
[id] => 76123
[type] => UNT
)
[3] => Array
(
[id] => 71231
[type] =>
)
[4] => Array
(
[id] => 79765
[type] => UNT
)
)
答
是的,我在想一个类似的解决方案:
usort($array, function ($a, $b) {
return $a['type'] == 'BOX' ? -1 : ($b['type'] == 'BOX' ? 1 : 0);
});
显示你已经尝试过。 –
_“如果我想按'BOX'排序,”_这不是很合乎逻辑。你的意思是你想用'type'命令吗? – FirstOne
一些参考文献:[我如何在PHP中对数组和数据进行排序?](http://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php)** && ** [PHP排序数组的子值](http://stackoverflow.com/questions/2477496/php-sort-array-by-subarray-value) – FirstOne