在数组中插入和删除字符串

时间:2010-03-12 10:55:15

标签: php arrays

我有一个数组和变量。 如果变量不存在于数组中,则必须添加该变量,否则必须将其删除。 为什么以下代码不起作用?

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

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

感谢。

4 个答案:

答案 0 :(得分:1)

我假设您正在使用PHP,如果是这样,数组声明不正确,它应该是:

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

你问题中的代码相当复杂 - 有点乱,我很遗憾地说 - 你想要它做什么。要实现您的目标,您可以使用array_search

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

如果数组不存在,则会将值推送到数组的末尾,如果存在,则将其删除。

答案 1 :(得分:0)

首先致电

array_unique()

没有意义,因为如果值在数组之前,你想删除它.​​. 在找到密钥并设置像keyFound = true之类的布尔值之后,你应该打破你的foreach循环 在循环之后,您可以检查它是否已设置,如果没有,则将变量插入到数组中 使用您的代码,每次比较变量时都会插入searchkey,而且它们不相同。

答案 2 :(得分:0)

嗯......你到那儿很乱。

如你所说,你应该使用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);

?>

答案 3 :(得分: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()方法从数组中删除值,如果值不存在,我们添加它。