假设我们有以下数组
$myArray = array(
"foo" => "value1" ,
"bar" => "value2" ,
"baz" => "value3" ,
"qux" => "value4"
);
当循环遍历并回显每个值时,它总是首先打印foo,第二个是bar,第三个是baz,第四个是qux。让我们说我想在foo之后显示qux的值。做这个的最好方式是什么。我正在尝试所有不同的用户,uasort,uksort并没有得到我想要的东西。
我看到很多很好的代码用于将索引移动到顶部使用splice而不是什么,但我还没有找到最好的方式来说,如何让这个索引在关联数组中的其他索引之前移动,所以当我们遍历它时,我们会在另一个之前点击我们想要的索引。
答案 0 :(得分:2)
这样的东西?
function custom_compare($a, $b) {
$target = array('foo', 'qux', 'bar', 'baz');
return array_search($b, $target) - array_search($a, $target);
}
$myArray = array(
"foo" => "value1",
"bar" => "value2",
"baz" => "value3",
"qux" => "value4"
);
uksort($myArray, 'custom_compare');
答案 1 :(得分:1)
不是很优雅,但它有效:
$arr = array(
"foo" => "value1" ,
"bar" => "value2" ,
"baz" => "value3" ,
"qux" => "value4"
);
$tmp = array();
foreach($arr as $k=>$v) {
$tmp[] = array($k=>$v);;
}
array_splice($tmp, 1, 0, array_slice($tmp, 3));
array_splice($tmp, -1);
$arr = array();
foreach($tmp as $k => $v) {
foreach($v as $k2 => $v2) {
$arr[$k2] = $v2;
}
}
print_r($arr);
<强>输出:强>
Array
(
[foo] => value1
[qux] => value4
[bar] => value2
[baz] => value3
)
答案 2 :(得分:-2)
也许你可以使用这样的东西?
没有所有的PHP - $
function swap(arr, idxFrom, idxTo )
{
var tmp = arr[idxFrom];
arr[idxFrom] = arr[idxTo];
arr[idxTo] = tmp;
}
抱歉,这应该是downvoted:您可以在数组中找到param的索引,然后使用splice。