Bir diziye doğru / dan bir dize takma ve çıkarma

4 Cevap php

I have an array and variable. If the variable does not exist in the array it has to be added, otherwise it has to be removed. Why the following code does not work?

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

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

Teşekkürler.

4 Cevap

Ben bu kadar dizi beyan doğru değilse, o olmalı, PHP kullanarak konum varsayalım:

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

Sorunuzu kod oldukça karmaşık - ve karmaşa biraz, ben söylediğim için üzgünüm - bunu yapmak istediğim için. Ne istediğinizi elde etmek, kullanmak olabilir array_search:

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

Bu yoksa dizinin sonuna değerini itin ve eğer değerini kaldırır olacaktır.

Tüm çağrı Öncelikle

array_unique()

makes no sense, because if the value was in the array before, you want to delete it .. you should break your foreach loop instead after you have found the key and set a boolean like keyFound = true.
After your loop, you can check if it has been set and if not, insert the variable to your array.
With your code, you are inserting your searchkey everytime a variable is compared and they are not the same.

Uhm ... orada var oldukça bir karmaşa.

Mensch dedi gibi, array_search kullanmalısınız.

İşte kod "remaster" biraz sadece çalışmak için değil - amaçları sadece öğrenmek için.

<?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);

?>

Sen yapabilirsin:

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

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

önce biz değer dizide olup olmadığını görmek için array_search() kullanın. Array_search dönüş değeri () olan false değeri yoksa ve değeri varsa ilgili anahtarını döndürür. Bu yüzden false ile dönüş değerini kontrol edin. Ayrıca biz $pos adında bir değişken dönüş değeri toplamak. Anahtar varsa, biz unset() yöntemi kullanılarak dizi değerini silin ve değeri yoksa biz eklemek.