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条)

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失