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中保存此条目:
    $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>';