我有一个数组和变量。 如果变量不存在于数组中,则必须添加该变量,否则必须将其删除。 为什么以下代码不起作用?
$ar = ["a","b","c"];
$vr = "b";
foreach ($ar as $i => $value) {
if ($value == $vr) {
unset ($ar[$i]);
} else {
$ar[] = $vr;
$ar = array_unique($ar);
}
}
感谢。
答案 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()方法从数组中删除值,如果值不存在,我们添加它。