排序按某个键
问题描述:
我有以下的数组的数组:排序按某个键
Array
(
[Places] => Array
(
[public] => 0
[entities] => Array
(
...
)
)
[Issues] => Array
(
[public] => 1
[entities] => Array
(
...
)
)
[Source] => Array
(
[public] => 0
[entities] => Array
(
...
)
)
)
我希望能够通过公共密钥数组排序。我知道我可能不得不使用ksort
或usort
,但我不确定如何实现此操作。
任何想法将非常感谢!
答
usort($array, function ($a, $b) { return $a["public"] - $b["public"]; });
答
看看这个,用在array_multisort:
$test = array(
'Places' => array(
'public' => 0,
'entities' => array(
)
),
'Issues' => array(
'public' => 1,
'entities' => array()
),
'Source' => array(
'public' => 0,
'entities' => array()
)
);
echo '<pre>';
print_r($test);
echo '</pre>';
array_multisort($test,SORT_ASC,$test);
echo '<pre>';
print_r($test);
echo '</pre>';
答
这里有一个有趣的联系:http://www.the-art-of-web.com/php/sortarray/
我会尝试
usort(usort(array, function), function);
我可以尝试示例代码根据请求,但信息已经在那里采取。
答
的一般方法来做到这一点使用array_multisort
是您的排序值放入自己的数组,然后使用两个数组排序,作为主要排序阵列。
尝试以下操作:
$test = array(
'Places' => array(
'public' => 0,
'entities' => array(
)
),
'Issues' => array(
'public' => 1,
'entities' => array()
),
'Source' => array(
'public' => 0,
'entities' => array()
)
);
echo '<pre>';
print_r($test);
echo '</pre>';
$sort = array();
foreach ($test as $k => $a) {
$sort[$k] = $a['public'];
}
// placing $sort first in array_multisort causes $test to be sorted in same order as the values in $sort
array_multisort($sort,SORT_ASC,$test);
echo '<pre>';
print_r($test);
echo '</pre>';
答
您可以用回调函数使用usort。
function cmp($a, $b) {
return $a['public'] == $b['public'] ? 0 : $a['public'] > $b['public'] ? 1 : -1;
}
usort($array, "cmp");
答
试试这个:
$code = "return (-1*strnatcmp(\$a['public'], \$b['public']));";
uasort($array, create_function('$a,$b', $code));
这主要是工作,但我失去的钥匙“位置”,“问题”和“源”有什么建议? – Lizard 2010-07-08 12:31:47
@Liz替换为'uasort'。 – Artefacto 2010-07-08 12:37:28
谢谢,现在唯一的问题是,我失去了所有的元素在'entities'键每个“邻居”,“问题”和“源”是可以解决的? – Lizard 2010-07-08 13:14:51