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

时间:2016-01-29 12:03:33

标签: php arrays regex

我有阵列:

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

不幸的是我无法控制这个数组的原始结构。所以这就是我们必须要合作的。

我要做的是仅删除与我定义的自定义值匹配的第一个键值对。

例如:

$toRemove = 'Bananas';

应用于未知的奇迹代码将导致:

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

请注意第二组Bananas值如何保持不变。我不介意你想重新索引,因为这会产生差距。

如果它不够具有挑战性,则需要在没有for循环的情况下完成。

3 个答案:

答案 0 :(得分:3)

循环和检查可能很有用。

$toRemove = 'Bananas';
foreach($yourArray as $key => $value) {
    if($value[0] === $toRemove) { // add more checks if you need ($value['Query'] === $toRemove)
        unset($yourArray[$key]);
        break;
    }
}

答案 1 :(得分:0)

如果你的数组没有修复,那么,

尝试此功能: -

 function remove_element_by_value($arr, $val) {
       $return = array(); 
       foreach($arr as $k => $v) {
          if(is_array($v)) {
             $return[$k] = remove_element_by_value($v, $val); //recursion
             continue;
          }
          if($v == $val) continue;
          $return[$k] = $v;
       }
       return $return;
    }

   $result = remove_element_by_value($arr,'Bananas');

希望它会对你有所帮助:)。

答案 2 :(得分:0)

  

......这需要在没有for循环的情况下完成。

如果您不想使用任何类型的循环,请遵循以下递归方法:

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

输出:

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)

以下是相关参考资料:

稍后,如果您想以数字方式重新排列索引,请使用array_values()函数,如下所示:

removeElement($arr, $arr, 'Bananas');

$newArr = array_values($arr);
var_dump($newArr);