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

Php 在数组中插入和删除字符串,php,arrays,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); }

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

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

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

谢谢。

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

$ar=数组(“a”、“b”、“c”)

您问题中的代码相当复杂,很抱歉,对于您希望它做的事情,代码有点混乱。要实现您想要的,您可以使用
array\u search

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

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

我假设您使用的是PHP,如果数组声明不正确,则应为:

$ar=数组(“a”、“b”、“c”)

您问题中的代码相当复杂,很抱歉,对于您希望它做的事情,代码有点混乱。要实现您想要的,您可以使用
array\u search

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

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

首先调用

array_unique()
没有意义,因为如果该值以前在数组中,则希望将其删除。。 在找到键并设置一个类似keyFound=true的布尔值后,应该中断foreach循环。
循环后,可以检查是否已设置,如果未设置,则将变量插入数组。

在代码中,每次比较一个变量时,您都会插入搜索键,而它们并不相同。

首先,调用

array_unique()
没有意义,因为如果该值以前在数组中,则希望将其删除。。 在找到键并设置一个类似keyFound=true的布尔值后,应该中断foreach循环。
循环后,可以检查是否已设置,如果未设置,则将变量插入数组。

在代码中,每次比较变量时,您都会插入搜索键,而它们并不相同。

嗯。。。你那里真是一团糟

正如门奇所说,您应该使用
array\u 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);

?>

嗯。。。你那里真是一团糟

正如门奇所说,您应该使用
array\u 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);

?>

您可以执行以下操作:

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

if(($pos = array_search($vr,$ar)) !== false)
    unset($ar[$pos]);
else
    $ar[] = $vr;
首先,我们使用来查看数组中是否存在该值。如果值不存在,则array_search()的返回值为
false
,如果值存在,则返回相应的键。因此,我们使用
false
检查返回值。我们还将返回值收集到名为
$pos
的变量中。如果键存在,我们将使用该方法从数组中删除该值,如果该值不存在,我们将添加该值。

您可以执行以下操作:

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

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

首先,我们使用来查看数组中是否存在该值。如果值不存在,则array_search()的返回值为
false
,如果值存在,则返回相应的键。因此,我们使用
false
检查返回值。我们还将返回值收集到名为
$pos
的变量中。如果键存在,我们将使用该方法从数组中删除该值,如果该值不存在,我们将其添加。

语法不正确,逻辑有缺陷,
foreach
迭代数组副本的事实。。。从哪里开始?不正确的语法,有缺陷的逻辑,
foreach
迭代数组副本的事实。。。从哪里开始?不起作用。array_search的返回值可以是0(在本例中搜索“a”)。因此,如果($valueExists)失败。您需要将$valueExists与false进行比较。0被视为false。您需要使用if($valueExists!==false)->进行比较,我看到您已经更正了它;)不起作用。array_search的返回值可以是0(在本例中搜索“a”)。因此,如果($valueExists)失败。您需要将$valueExists与false进行比较。0被视为false。您需要使用if($valueExists!==false)->进行比较,我看到您已经更正了它;)