2010-03-12 18 views
1

我有一個數組和變量。 如果數組中不存在該變量,則必須將其添加,否則必須將其刪除。 爲什麼下面的代碼不起作用?插入並從數組中刪除字符串

$ar = ["a","b","c"]; 
$vr = "b"; 

foreach ($ar as $i => $value) { 
    if ($value == $vr) { 
     unset ($ar[$i]); 
    } else { 
     $ar[] = $vr; 
     $ar = array_unique($ar); 
    } 
} 

謝謝。

+1

不正確的語法,有缺陷的邏輯,「foreach」遍歷數組副本......從哪裏開始? – 2010-03-12 11:01:47

回答

1

我假設你正在使用PHP,如果是這樣的數組聲明是不正確的,它應該是:

$ar = array("a", "b", "c");

你的問題的代碼是相當複雜 - 而且有點亂,我很抱歉地說 - 爲了你想做的事情。爲了達到你想要什麼,你可以使用array_search

$valueExists = array_search($vr, $ar); 
if ($valueExists !== false) { 
    unset($ar[$valueExists]); 
} else { 
    $ar[] = $vr; 
} 

這將價值推到數組的結尾,如果它不存在,並刪除,如果它的價值吧。

+1

不起作用。 array_search的返回值可以是0(在本例中搜索「a」時)。所以你的if($ valueExists)失敗。您需要將$ valueExists與false進行比較。 – codaddict 2010-03-12 11:12:21

+0

你是對的,謝謝你指出。更正它。 – mensch 2010-03-12 11:17:35

+0

0被視爲false。你需要使用if($ valueExists!== false)進行比較 - >我看你已經糾正了它;) – Tobias 2010-03-12 11:17:37

0

首先調用到

array_unique() 

是沒有意義的,因爲如果值之前在數組中,要刪除它.. 你應該打破你的foreach循環你已經找到代替後鍵並設置一個像keyFound = true的布爾值。
循環後,你可以檢查它是否已經設置,如果沒有,插入變量到你的數組。
用你的代碼,你每次插入你的searchkey一個變量進行比較,它們是不一樣的。

0

呃......你已經到了那裏很嘈雜。正如mensch所說,你應該使用array_search

這裏是你的代碼有點「修復」,只是爲了工作 - 僅用於學習目的。

<?php 

function toggle($ar, $vr) 
{ 
    $found = false; 
    foreach ($ar as $i => $value) 
    { 
     if ($value == $vr) 
     { 
      unset ($ar[$i]); 
      $found = true; 
     } 
    } 

    if (!$found) 
    { 
     $ar[] = $vr; 
     $ar = array_unique($ar); 
    } 
    return $ar; 
} 

function printArray($ar) 
{ 
    foreach ($ar as $i => $value) 
    { 
     echo ($value . " - "); 
    } 
    echo ("<br/>"); 
} 

$ar = array("a", "b", "c"); 

printArray($ar); 

$ar = toggle($ar, "b"); 

printArray($ar); 

$ar = toggle($ar, "k"); 

printArray($ar); 

?> 
0

你可以這樣做:

$ar = array("a","b","c"); 
$vr = "d"; 

if(($pos = array_search($vr,$ar)) !== false) 
    unset($ar[$pos]); 
else 
    $ar[] = $vr; 

首先我們使用array_search(),看是否存在於數組中的值。如果值不存在,則array_search()的返回值爲false,如果值存在,則返回相應的鍵。所以我們用false檢查返回值。我們還在一個名爲$pos的變量中收集返回值。如果密鑰存在,我們使用unset()方法從數組中刪除該值,如果該值不存在,我們將其添加。