我有2个数组,1个保存要显示的数据,另一个保存顺序。
将在foreach循环中使用以下数组来显示:
array(
[Posts] =>
[0] =>
id => 7
content => 'some content'
[1] =>
id => 3,
content => 'some other content'
[2] =>
id => 4,
content => 'some more content'
[3] =>
id => 2,
content => 'some irrelevant content'
)
此数组包含排序位置:
array(
2, 4, 7, 3
)
我想基于关联数组中的vumulue对第一个数组进行排序,其中键是与第二个数组匹配的id。
预期产出:
array(
[Posts] =>
[0] =>
id => 2,
content => 'some irrelevant content'
[1] =>
id => 4,
content => 'some more content'
[2] =>
id => 7
content => 'some content'
[3] =>
id => 3,
content => 'some other content'
)
答案 0 :(得分:4)
如果源数组键等于Ids,你会非常自豪。这会加快速度。但是现在这会使您的源数据按照您的排序数组值进行排序:)
$res = array();
foreach( $sortArray as $sortId ) {
foreach( $srcArray as $item ) {
if( $item['id'] == $sortId ) {
$res = $item;
break;
}
}
}
修改强>
如果您将Id用作密钥,则第二个foreach()
将毫无用处:
$res = array();
foreach( $sortArray as $sortId ) {
$res[] = $srcArray[ $sortId ];
}
答案 1 :(得分:1)
此解决方案使用usort
:
$sarray = array(2, 4, 7, 3);
$sarray = array_flip($sarray);
usort($posts, function($a, $b) use($sarray) {
// TODO: check if the array-index exists ;)
$index_a = $sarray[$a['id']];
$index_b = $sarray[$b['id']];
return $index_a - $index_b;
});
var_dump($posts);
由于我正在使用闭包,你需要PHP 5.3才能使用它。如果您需要具有5.2兼容性,则可能必须使用create_function
。