【问题标题】:How do I remove specific keys from Array? PHP如何从 Array 中删除特定键? PHP
【发布时间】:2011-07-09 07:02:35
【问题描述】:

我正在尝试从数组中删除键。

这是我通过打印 print_r($cats); 得到的结果

Array
(
    [0] => <a href="/website/index.php/Category:All" title="Category:All">All</a> &gt; <a href="/website/index.php/Category:Computer_errors" title="Category:Computer errors">Computer errors</a> &gt; <a href="/website/index.php/Category:HTTP_status_codes" title="Category:HTTP status codes">HTTP status codes</a> &gt; <a href="/website/index.php/Category:Internet_terminology" title="Category:Internet terminology">Internet terminology</a> 
    [1] => 
<a href="/website/index.php/Category:Main" title="Category:Main">Main</a> 
)

我正在尝试使用它从数组中删除“主要”类别

    function array_cleanup( $array, $todelete )
{
    foreach( $array as $key )
    {
        if ( in_array( $key[ 'Main' ], $todelete ) )
        unset( $array[ $key ] );

    }
    return $array;
}

$newarray = array_cleanup( $cats, array('Main') );

仅供参考,我是 PHP 新手...显然我看到我犯了错误,但我已经尝试了很多东西,但它们似乎不起作用

【问题讨论】:

    标签: php arrays key


    【解决方案1】:

    main 不是数组的元素,它是数组元素的一部分

    function array_cleanup( $array, $todelete )
    {
        $cloneArray = $array;
        foreach( $cloneArray as $key => $value )
        {
            if (strpos($value, $todelete ) !== false)   
               unset( $array[ $key ] );     //$array[$key] = str_replace($toDelete, $replaceWith, $value) ;  // add one more argument $replaceWith to function 
    
        }
        return $array;
    }
    

    编辑:

    带数组

    function array_cleanup( $array, $todelete )
        {
          foreach($todelete as $del){
            $cloneArray = $array;
            foreach( $cloneArray as $key => $value )
            {          
                if (strpos($value, $del ) !== false)   
                   unset( $array[ $key ] );     //$array[$key] = str_replace($toDelete, $replaceWith, $value) ;  // add one more argument $replaceWith to function 
    
               }
        }
         return $array;
    }
    
      $newarray = array_cleanup( $cats, array('Category:Main') );
    

    【讨论】:

    • 应该是strpos($value, $toDelete) !== false
    • 我在 if (strpos($value, $toDelete)! == false) 上也遇到解析器错误
    • 你根本不用替换它。这是一个函数参数。你可以用 'Category:Main' 或任何你想过滤的字符串来调用它。
    • @user585303 :您可以使用str_replace()php.net/manual/en/function.str-replace.php
    • 应该是 ` !== false, not ! == 假`
    【解决方案2】:

    想要注意的是,虽然接受的答案有效,但有一个内置的 PHP 函数可以处理这个问题,称为 array_filter。对于这个特定的例子,它会是这样的:

    public function arrayRemoveMain($var){
        if ( strpos( $var, "Category:Main" ) !== false ) { return false; }
        return true;
    }
    
    $newarray = array_filter( $cats, "arrayRemoveMain" );
    

    显然有很多方法可以做到这一点,并且接受的答案很可能是最理想的情况,尤其是在有大量 $todelete 选项的情况下。使用内置的 array_filter,我不知道如何传递额外的参数,如 $todelete,因此必须为每个选项创建一个新函数。

    【讨论】:

    • 我和你在一起!函数式编程应该更受欢迎。甚至可以将函数放在括号内!然后,要添加对 $todelete 的支持,您可以在函数参数之后创建一个带有“use ($todelete)”的闭包: $todelete="Category:Main"; $newarray = array_filter($cats, function($cat) use($todelete){ if...});
    【解决方案3】:

    这很容易。

    $times = ['08:00' => '08:00','09:00' => '09:00','10:00' => '10:00'];
    $timesReserved = ['08:00'];
    $times = (function() use ($times, $timesReserved) {
            foreach($timesReserved as $time){
                unset($times[$time]);
            }
            return $times;
        })();
    

    【讨论】:

      【解决方案4】:

      问题是“我如何删除特定的键”。如果您想消除包含特定字符串的键,那么这里有一个数组过滤器的答案,在我们的示例中,如果我们想消除任何包含“alt_ "

      $arr = array(
      "alt_1"=>"val", 
      "alt_2" => "val", 
      "good key" => "val"
      );
      
      function remove_alt($k) {
          if(strpos($k, "alt_") !== false) {
              # return false if there's an "alt_" (won't pass array_filter)
              return false;
          } else {
              # all good, return true (let it pass array_filter)
              return true;
          }
      
      }
      
      $new = array_filter($arr,"remove_alt",ARRAY_FILTER_USE_KEY);
                                              # ^ this tells the script to enable the usage of array keys!
      

      这将返回

      array(""好键" => "val");

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 2016-05-10
        • 2017-06-22
        • 2020-05-26
        相关资源
        最近更新 更多