2011-03-05 116 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」);