【问题标题】:PHP re-order array by selecting an item to be the firstPHP通过选择第一个项目来重新排序数组
【发布时间】:2015-10-17 21:03:11
【问题描述】:

我有一个相当复杂的问题,可能与array_splice 有关,但我无法弄清楚。这是我拥有的数组的一个示例:

array(
 'a' => 'Element A',
 'b' => 'Element B',
 'c' => 'Element C',
 'd' => 'Element D',
 'e' => 'Element E'
);

我想要做的是根据我选择的键重新排序数组,比如“c”,这样最终结果是:

array(
 'c' => 'Element C',
 'd' => 'Element D',
 'e' => 'Element E',
 'a' => 'Element A',
 'b' => 'Element B'
);

它基本上将选定的键移到前面,同时保持顺序不变。非常感谢任何帮助!

【问题讨论】:

  • 所以你把c作为输入,而你只是想把它移到顶部?
  • 您是否尝试过使用this(删除最后一个元素)和thisthis(将其添加到数组的开头)?

标签: php arrays


【解决方案1】:

你应该看到 sort() 函数的文档:http://php.net/manual/en/function.sort.php

在“用户贡献的笔记”中,您可能会找到适合您问题的完美功能!

【讨论】:

  • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
【解决方案2】:

array_search() 将从数组中获取carray_keys() 中的偏移量。然后array_slice() 那和array_merge() 与修改后的原始数组:

$array = array_merge(array_slice($array, array_search('c', array_keys($array)), null),
                     $array);

【讨论】:

    【解决方案3】:

    不是最漂亮的解决方案,但它有效

    $arr = array(
     'a' => 'Element A',
     'b' => 'Element B',
     'c' => 'Element C',
     'd' => 'Element D',
     'e' => 'Element E'
    );
    
    function doIt($key, &$arr)
    {
       $tmp  = array();
       $tmp2 = array();
       $flag = false;
       foreach($arr as $k => $v) {
          if($k == $key) {
             $flag = true;
          }
          if($flag) {
            $tmp2[$k] = $v;
          } else {
            $tmp[$k] = $v;
          }
       }
       $arr = array_merge($tmp2, $tmp);
    }
    doIt('c', $arr);
    print_r($arr);
    

    输出:

    Array
    (
        [c] => Element C
        [d] => Element D
        [e] => Element E
        [a] => Element A
        [b] => Element B
    )
    

    Fiddle

    【讨论】:

    • 确实有点丑:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多