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)->进行比较,我看到您已经更正了它;)