如何从数组中删除特定的键?PHP

9

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

这是我从打印 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不熟悉......很明显,我犯了错误,但我已经尝试了很多方法,它们似乎都不起作用。

4个回答

10

主函数不是数组的元素,它是数组的一个元素的一部分。

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

1
应该是 strpos($value, $toDelete) !== false - Explosion Pills
我也在这行代码中遇到了解析器错误:if (strpos($value, $toDelete )! == false) - user585303
你根本不需要替换它。这是一个函数参数。你可以用“Category:Main”或任何想要过滤的字符串来调用它。 - Explosion Pills
@user585303:你可以使用str_replace()。http://www.php.net/manual/zh/function.str-replace.php - Gaurav
应该是 !== false,而不是 ! == false - Explosion Pills
显示剩余2条评论

3

我想指出的是,虽然被接受的答案可以工作,但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...}); - Harry Pehkonen

0
问题是“如何删除特定的键”.. 如果您想要消除包含特定字符串的键,例如我们的示例中如果我们想要消除任何包含“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!

这将返回

数组(""good key" => "val");


0

这很容易。

$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;
    })();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接