Php 如何将选定的数组键置于数组顶部?
假设我有一个数组,如下所示:Php 如何将选定的数组键置于数组顶部?,php,arrays,Php,Arrays,假设我有一个数组,如下所示: $food['fruit'] = array('apples','oranges','bananas'); $food['veg'] = array('potatoes','onions','peppers'); $food['meat'] = array('bacon','beef','chicken'); 我该如何订购它,以便将任何给定类型的食物带到阵列顶部,而订单的其余部分保持不变 因此,如果用户选择“素食”,则会将顺序更改为: $food = array(
$food['fruit'] = array('apples','oranges','bananas');
$food['veg'] = array('potatoes','onions','peppers');
$food['meat'] = array('bacon','beef','chicken');
我该如何订购它,以便将任何给定类型的食物带到阵列顶部,而订单的其余部分保持不变
因此,如果用户选择“素食”,则会将顺序更改为:
$food = array('veg' => ..., 'fruit' => ..., 'meat' => ...);
这不是排序,因为您只想移动一个元素,所以:
- 用于从阵列中间移除元素
- 然后使用将其添加到阵列的前端
$tmp_val=array('key'=>$food['key'])代码>
unset($food['key'])代码>
array\u unshift($food,$tmp\u val)
您可以创建新阵列、重新排列和替换旧阵列:
$first = 'veg';
$tmp = array ($first => $food[$first]);
foreach ($food AS $key => $val) {
if ($key != $first) {
$tmp[$key] = $val;
}
}
$food = $tmp;
或
像这样
$food = array_merge(array('veg' => $food['veg']), $food);
但我觉得整件事都很可疑。你能解释一下为什么需要这个吗?避免循环:
$food['fruit'] = array('apples','oranges','bananas');
$food['veg'] = array('potatoes','onions','peppers');
$food['meat'] = array('bacon','beef','chicken');
$food['fish'] = array('code','haddock','plaice');
$key = 'veg';
if (array_key_exists($key,$food)) {
$tmp[$key] = $food[$key];
array_splice($food,array_search($key,array_keys($food)),1);
$food = $tmp+$food;
}
echo '<pre>';
var_dump($food);
echo '</pre>';
$food['fruit']=array('apples','oranges','banana');
$food['veg']=数组(“土豆”、“洋葱”、“辣椒”);
$food['meat']=数组(“培根”、“牛肉”、“鸡肉”);
$food['fish']=array('code','haddock','plaice');
$key='veg';
如果(数组\键\存在($key,$food)){
$tmp[$key]=$food[$key];
数组拼接($food,数组搜索($key,数组键($food)),1);
$food=$tmp+$food;
}
回声';
瓦鲁垃圾场(食品);
回声';
我认为不能使用array\u unshift将元素添加到assoc数组中,因为您只能传递一个值,而没有键。array\u unshift将插入$tmp\u val作为$food数组的第一个元素。bcmcfc想做的是更改assoc数组的第一个键。你所说的“整个事情看起来可疑”到底是什么意思?我明白了,为什么人们会质疑这个网站上存在的问题呢。我从字面意义上理解它(即,怀疑什么?),以前从未将可能设计糟糕的代码视为“可疑”!
$food['fruit'] = array('apples','oranges','bananas');
$food['veg'] = array('potatoes','onions','peppers');
$food['meat'] = array('bacon','beef','chicken');
$food['fish'] = array('code','haddock','plaice');
$key = 'veg';
if (array_key_exists($key,$food)) {
$tmp[$key] = $food[$key];
array_splice($food,array_search($key,array_keys($food)),1);
$food = $tmp+$food;
}
echo '<pre>';
var_dump($food);
echo '</pre>';