【问题标题】:PHP: How to delete all array elements after an index [duplicate]PHP:如何删除索引后的所有数组元素[重复]
【发布时间】:2014-03-18 01:12:36
【问题描述】:

是否可以删除索引后的所有数组元素?

$myArrayInit = array(1=>red, 30=>orange, 25=>velvet, 45=>pink);

现在有些“魔法”

$myArray = delIndex(30, $myArrayInit);

得到

$myArray = array(1=>red, 30=>orange); 

由于$myArray 中的键不是连续的,我看不到array_slice() 的机会

Please note : 必须保留密钥! + 我只知道偏移键!!

【问题讨论】:

    标签: php arrays function output associative-array


    【解决方案1】:

    不使用循环。

    <?php
        $myArrayInit = [1 => 'red', 30 => 'orange', 25 => 'velvet', 45 => 'pink']; //<-- Your actual array
        $offsetKey = 25; //<--- The offset you need to grab
    
        //Lets do the code....
        $n = array_keys($myArrayInit); //<---- Grab all the keys of your actual array and put in another array
        $count = array_search($offsetKey, $n); //<--- Returns the position of the offset from this array using search
        $new_arr = array_slice($myArrayInit, 0, $count + 1, true);//<--- Slice it with the 0 index as start and position+1 as the length parameter.
        print_r($new_arr);
    

    Output :

    Array
    (
        [1] => red
        [30] => orange
        [25] => velvet
    )
    

    【讨论】:

    • 我认为你的答案更好,因为它保留了关键关联:)
    • 感谢 sankar 让我注意到 array_slice 的第四个参数 :)
    • 伙计们,你们太棒了!!!谢谢你非常非常非常非常多!!!
    • @Nouphal.M ,很高兴听到那个伙伴。 :)
    【解决方案2】:

    试试

    $arr = array(1=>red, 30=>orange, 25=>velvet, 45=>pink);
    $pos = array_search('30', array_keys($arr));
    $arr= array_slice($arr,0,$pos+1,true);
    echo "<pre>";
    print_r($arr);
    

    demo

    【讨论】:

    • 但是没有保留密钥。
    • 如果 OP 不关心它,那么你的就是最好的 :)
    • 确实删除了 prev 元素,而不是以下
    • 哎呀..我会更新我的答案
    • @viktor 更新了我的答案。但是桑卡尔应该得到正确的答案
    【解决方案3】:

    我会遍历数组直到你到达你想要截断数组的键,然后将这些项目添加到一个新的临时数组中,然后将现有数组设置为 null,然后将临时数组分配给现有数组。

    【讨论】:

      【解决方案4】:

      这使用标志值来确定您的限制:

      $myArrayInit = array(1=>'red', 30=>'orange', 25=>'velvet', 45=>'pink');
      
      $new_array = delIndex(30,$myArrayInit);
      
      function delIndex($limit,$array){
      
          $limit_reached=false;
      
          foreach($array as $ind=>$val){
      
              if($limit_reached==true){
                  unset($array[$ind]);
              }
              if($ind==$limit){
                  $limit_reached=true;
              }
      
          }
          return $array;
      }
      print_r($new_array);
      

      【讨论】:

      • +1 上面的代码还保留了键关联,也没有使用array functions
      【解决方案5】:

      试试这个:

      function delIndex($afterIndex, $array){
          $flag = false;
          foreach($array as $key=>$val){
              if($flag == true)
                  unset($array[$key]);
              if($key == $afterIndex)
                   $flag = true; 
          }
          return $array;
      }
      

      此代码未经测试

      【讨论】:

      • 仅代码的答案在 SO 上的价值很低。
      猜你喜欢
      • 2012-02-12
      • 2011-07-10
      • 1970-01-01
      • 2016-12-08
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      相关资源
      最近更新 更多