2013-04-22 146 views
1

我有一個字符串數組,並希望刪除從陣列包含單詞「Free_Course」從數組中刪除符合特定字(PHP),其所有的字符串

數組中存放字符串,例如所有元素「Free_Course_123」,「Free_Course_124」,「Other_Course_123」,Other_Course_1234等等。

我只是想遍歷數組,並刪除所有包含「Free_Course」,所以這將擺脫上面列出的前2個元素。

我已經使用這個preg_grep功能可按嘗試過,但沒有成功作爲尚未:

$cleanTags= preg_grep("/^Free_Course*/", $tags); 
+1

''^在正則表達式模式的開始不是反轉。這是「字符串的開始」錨。只有在字符類的開始時纔是倒置的,例如, '[^ xyz]'(除x/y/z以外的任何內容)。你寫的正則表達式只會簡單地返回一個你想刪除的東西 - 所有以'Free_Course'開頭的條目。 – 2013-04-22 18:25:43

+0

我不斷收到此錯誤:stdClass類的對象無法轉換爲字符串..可能我的數組不是字符串,但對象?任何想法? – gray 2013-04-22 18:29:28

+0

在將對象分配給另一個變量之前,您可以使用(數組)符號強制轉換對象。 $ collection =(array)$ tag; – 2013-04-22 18:30:41

回答

0

你試過

$tags = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234" 
); 
$cleanTags= preg_grep("/Free_Course/", $tags, PREG_GREP_INVERT); 
print_r($cleanTags); 

?最後一個屬性反轉過濾功能,見the manual

我已經測試的結果,它應該工作,因爲PHP 4.2.0

Array ([2] => Other_Course_123 [3] => Other_Course_1234) 
+0

我不斷收到此錯誤:stdClass類的對象無法轉換爲字符串..可能我的數組不是字符串,但對象?我對此很感興趣,雖然 – gray 2013-04-22 18:27:05

+0

@gray:不能 - 請參閱我的更新回答 – 2013-04-22 18:34:44

+0

感謝它現在爲我工作 – gray 2013-04-22 18:34:58

3

你可以使用原生的PHP函數strposhttp://php.net/manual/fr/function.strpos.php)來確定您的陣列應該是值刪除:

<?php 

foreach ($tags as $index => $tag) { 
     if (strpos($tag, 'Free_Course') !== false) { 
      unset($tags[$index]); 
     } 
} 
1

你可以做的preg_match,只返回那些不匹配。

foreach($array as $key => $value) 
    if(!preg_match("/Free_Course/i", $value)) 
     echo $value . '<br>'; 

或者要創建一個新的數組...

foreach($array as $key => $value) 
    if(!preg_match("/Free_Course/i", $value)) 
     $new_array[] = $value; 
0

使用array_walk:

$arr = array(
    "Free_Course_123", 
    "Free_Course_124", 
    "Other_Course_123", 
    "Other_Course_1234" 
); 

$arr = array_filter($arr, function($e){ 
    return strpos($e, 'Free_Course') === false; 
}); 

(編輯:我誤解了這個問題)

1

試試這個

<?php 
foreach($tags as $key => $val) 
{ 
    if(!preg_grep("/(?!Free_Course).*/", $tags)) { 
     echo $val; 
    } 
} 
?> 
0

$ cleanTags =和array_diff($標記,preg_grep( 「/ Free_Course * /」,$標記));

0

在字符類列表,即「[^ A-ZA-Z0-9] +是指‘一個或多個字符,它們不是字母數字字符’。

的開始使用時,「^」只意味着否定

如果在(perl)正則表達式的開頭使用「^」,則意味着「跟隨必須在行首」,因此「/^Free_Course * /」將匹配任何以「零」開頭的字符串或更多「Free_Course」文本實例,這不是你想要的。

我會用Thierry Marianne的解決方案。

如果你想知道,「?我怎麼否定詞與正則表達式,然後」,看到這個線程:

Regular expression to match a line that doesn't contain a word?

相關問題