2011-03-05 110 views
9

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

这是我从印刷print_r($猫)得到的;

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删除“主”的范畴......很显然,我看到,我犯过错误,但我已经尝试了很多事情,他们似乎只是不工作

回答

9

主要不是数组的元素,其数组的元素的一部分

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' – 2011-03-05 06:24:28

+0

@tandu:谢谢。更新。 – Gaurav 2011-03-05 06:26:33

+0

if(strpos($ value,$ toDelete)!== false)我也得到解析器错误 – user585303 2011-03-05 06:29:30

2

诚征注意,虽然接受的答案工作有一个内置在处理这个叫array_filter PHP函数。对于这个特殊的例子它会是这样的:

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

$newarray = array_filter($cats, "arrayRemoveMain"); 

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

+0

我与你同在!函数式编程应该更受欢迎。甚至可以将功能放在括号内!然后,为了添加对$ todelete的支持,你可以在函数参数后面创建一个带“use($ todelete)”的闭包:$ todelete =“Category:Main”; $ newarray = array_filter($ cats,function($ cat)use($ todelete){if ...}); – 2014-06-13 15:21:08

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

这将返回

阵列( “” 好键” => “VAL”);