【问题标题】:Move array item with certain key to the first position in an array, PHP将具有特定键的数组项移动到数组中的第一个位置,PHP
【发布时间】:2022-11-14 20:55:53
【问题描述】:

PHP中将键选择的数组元素移动到第一个位置的最优雅的方法是什么?

输入:

$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
....
$arr[n]=n;
$key=10;

输出:

$arr[0]=10;
$arr[1]=0;
$arr[2]=1;
$arr[3]=2;
....
$arr[n]=n;

【问题讨论】:

  • 在示例中,您不是“按键选择元素”。您只是在数组的开头插入一个任意值。我认为这可能会使其他人感到困惑
  • @galymzhan 我认为这暗示 $arr[10] 以前是 10,现在它从 $arr[9]=9 变为 $arr[10]=11。我同意这个例子没有清楚地说明这一点。最好 a) 显示正在“移动”的数组元素,并且 b) 使用不同的元素值,因此更难将键与其值混淆。
  • 似乎最好的方法是使用临时数组和循环的好方法
  • @octern 是的,我认为你是对的,因为 $arr 的大小保持不变 $arr[n] = n

标签: php arrays


【解决方案1】:

使用array_unshift

$new_value = $arr[n];
unset($arr[n]);
array_unshift($arr, $new_value);

【讨论】:

  • 同一个数组,看起来好像不换key
  • 哎呀编辑:我正在打印密钥,让我再试一次。当然可以。我很抱歉造成混乱
  • 很高兴它有帮助。请注意,该数组之后需要重新索引。在这里阅读如何做到这一点:stackoverflow.com/questions/591094/…
【解决方案2】:

无需取消设置键。为了简短起见,请执行以下操作

//appending $new in our array 
array_unshift($arr, $new);
//now make it unique.
$final = array_unique($arr);

Demo

【讨论】:

  • 此解决方案仅适用于包含数字并忽略其键的数组。此外,它正在插入一个新元素,但问题是如何将现有的数组项移动到第一个位置。它显然没有回答这个问题。
【解决方案3】:

老问题,已经回答了,但如果你有一个关联数组,你可以使用 array_merge。

$arr = array_merge([$key=>$arr[$key]], $arr);

已编辑(上面显示 PHP7+ 符号,下面是示例)

$arr = ["a"=>"a", "b"=>"b", "c"=>"c", "d"=>"d"];
$arr = array_merge(["c"=>$arr["c"]], $arr);

本次手术的有效结果

$arr == ["c"=>"c", "a"=>"a", "b"=>"b", "d"=>"d"]

【讨论】:

  • 惊人的!你拯救了我的一天。
  • 这段代码不复制元素而不是移动它?
  • @Gonzalingui,你可能是对的!但是,它不取决于数组中的值吗?如果它是标量,它可能会复制它,但如果它是一个参考值,那么它不会只复制引用而不是值吗? (我可能是错的,但我认为 OP 并没有询问更多关于更改数组变量中的值的问题,而不是移动与复制内存中保存的值的基础计算机科学基础。:))
【解决方案4】:

像这样的东西应该工作。检查数组键是否存在,获取它的值,然后unset它,然后使用array_unshift再次创建项目并将其放在开头。

if(in_array($key, $arr)) {
    $value = $arr[$key];
    unset($arr[$key]);
    array_unshift($arr, $value);
}

【讨论】:

    【解决方案5】:
    <?php
    $key = 10;
    $arr = array(0,1,2,3);
    array_unshift($arr,$key);
    var_dump($arr) //10,0,1,2,3
    ?>
    

    【讨论】:

    • 这会添加所选元素,但不会通过键引用它并将其从数组中的其他位置删除。
    【解决方案6】:
    $arr[0]=0;
    $arr[1]=1;
    $arr[2]=2;
    $arr[3]=10;
    
    
    $tgt = 10;
    $key = array_search($tgt, $arr);
    unset($arr[$key]);
    array_unshift($arr, $tgt);
    
    // var_dump( $arr );
    array
    0 => int 10
    1 => int 0
    2 => int 1
    3 => int 2
    

    【讨论】:

      【解决方案7】:

      由于任何数字键都将使用array_unshift 重新索引(如in the doc 所述),因此最好使用+ 数组联合运算符将具有某个键的项移动到数组的第一个位置:

      $item = $arr[$key];
      unset($arr[$key]);
      $arr = array($key => $item) + $arr;
      

      【讨论】:

        【解决方案8】:
        $tgt = 10;
        $key = array_search($tgt, $arr);
        for($i=0;$i<$key;$i++)
        {
           $temp = $arr[$i];
           $arr[$i] = $tgt;
           $tgt = $temp;
        }
        

        在这个简单的代码之后,您需要做的就是显示重新排列的数组。 :)

        【讨论】:

          【解决方案9】:

          例如:$arr = [$key =&gt; $arr[$key]] + $arr;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-15
            • 2017-06-09
            • 1970-01-01
            • 2018-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多