dream0776 2016-01-29 12:03
浏览 106
已采纳

从数组中删除与我定义的自定义值匹配的第一个键值对

I have array:

Array ( [0] => Array ( [0] => Apples [Query] => Apples ) [1] => Array ( [0] => Bananas [Query] => Bananas ) [2] => Array ( [0] => Bananas [Query] => Bananas ) [3] => Array ( [0] => Oranges [Query] => Oranges ) )

Unfortunately I have no control over the original structure of this array. So this is what we have to work with.

What I am trying to do is remove only the first key,value pair that matches a custom value that I define.

For Example:

$toRemove = 'Bananas';

Applied to a yet unknown miracle piece of code would result in:

Array ( [0] => Array ( [0] => Apples [Query] => Apples ) [2] => Array ( [0] => Bananas [Query] => Bananas ) [3] => Array ( [0] => Oranges [Query] => Oranges ) )

Notice how the second set of Bananas values remained untouched. I don't mind if you want to re-index because of gap this creates.

And if it wasn't challenging enough this needs to be done without a for loop.

  • 写回答

3条回答 默认 最新

  • douqi4673 2016-01-29 12:53
    关注

    ...this needs to be done without a for loop.

    If you don't want to use any kind of loop, then follow this recursive method:

    function removeElement(&$origArr, $arr, $element, $prevKey = null){
        static $flag = false;
        if($flag){
            return;
        }
        if(is_array(current($arr))){
            removeElement($origArr, next($arr), $element, key($arr));
        }else{
            if(current($arr) == $element){
                $flag = true;
                unset($origArr[$prevKey]);
                return;
            }else{
                removeElement($origArr, next($arr), $element, key($arr));
            }
        }
    }
    
    // suppose $arr is your original array
    removeElement($arr, $arr, 'Bananas');
    
    // display $arr array
    var_dump($arr);
    

    Output:

    array (size=3)
      0 => 
        array (size=2)
          0 => string 'Apples' (length=6)
          'Query' => string 'Apples' (length=6)
      2 => 
        array (size=2)
          0 => string 'Bananas' (length=7)
          'Query' => string 'Bananas' (length=7)
      3 => 
        array (size=2)
          0 => string 'Oranges' (length=7)
          'Query' => string 'Oranges' (length=7)
    

    Here are the relevant references:


    Later, if you want to rearrange the indices numerically then use array_values() function, like this:

    removeElement($arr, $arr, 'Bananas');
    
    $newArr = array_values($arr);
    var_dump($newArr);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划