2010-03-12 41 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()方法从数组中删除该值,如果该值不存在,我们将其添加。