PHP: beklendiği gibi tüm Kod İçinde, oyunculuk değil Fcn Kaldır

2 Cevap php

Ben ($ diziden tüm $ elem kaldırın) Bu basit bir işlevi yaptı:

function remall($array, $elem) {
    for($i=0; $i < count($array); $i++)
        if($array[$i] == $elem)
            unset($array[$i]);
    $newarray = array_values($array);
    return $newarray;
}

Ama mükemmel çalışmıyor, burada bazı girişler ve çıkışlar vardır

$u = array(1, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 7);
$r = remall($u, 7);
Output of $r: 12345767

$n = array(7, 7, 1, 7, 3, 4, 6, 7, 2, 3, 1, -3, 10, 11, 7, 7, 7, 2, 7);
$r = remall($n, 7);
Output of $r: 1346231-30117727

Notice how there are still 7s in my outputs. Also, My function will only be removing numbers from an array. Let me know if you spot something, thanks.

ÇÖZÜM: Hey çocuklar bu (Flavius ​​Stef teşekkürler) benim için çalıştı nedir

function remall($array, $elem) {
    return array_values(array_diff($array, array($elem)));
}

2 Cevap

Ben gitmek istiyorum

return array_diff($array, array($elem));

Eğer giriş dizi sayısal (ziyade birleştirici) ve anahtarlarında 'delikleri' olmadan garanti edebilir?

Kullanmak foreach ($array as $key => $value) { ... } yerine isteyebilirsiniz for ($i=0; $i < count($array); $i++) { ... }.

Ve unset() olacak - kenara ilk paragrafta açıklanan ihtar gelen, ikinci yaklaşımı (şimdi kullandığınız bir) for count() her yineleme değerlendirir (sonra ilk maçtan sonra, o ve benzeri dokuz var ve olacak, ilk dizi on unsurları vardır) bu değeri, doğal olarak.

Kullanmak array_filter() ve özel bir geri arama yöntemi tedarik etmek için çok iyi bir seçenek değil ama başka bir seçenek, tamamen kendi işlevi yapmak için ihtiyacı sidestepping, olurdu eğer kriter (o ;) olacak gibi hangi, bu örnekte bir parametre olmak görünüyor) çok değiştirir.

Edit: En iyi çözüm (tam olarak ne istediğinizi yaparken, en okunabilir ve en sürdürülebilir) (3 [{başı olarak, array_diff() kullanmak olacaktır )]} 'cevabı:

return array_diff($array, array($elem));