Cara menggunakan array splice php

Bagaimana cara menghapus elemen dari array ketika saya tahu nama elemen? sebagai contoh:

Saya memiliki sebuah array:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

pengguna memasukkan strawberry

strawberry dihapus.

Untuk sepenuhnya menjelaskan:

Saya memiliki database yang menyimpan daftar item yang dipisahkan oleh koma. Kode menarik dalam daftar berdasarkan pilihan pengguna di mana pilihan itu berada. Jadi, jika mereka memilih stroberi, mereka menarik kode di setiap entri jika stroberi berada kemudian mengubahnya menjadi array menggunakan split (). Saya ingin mereka menghapus item yang dipilih pengguna, untuk strawberry contoh ini, dari array.

Gunakan array_search untuk mendapatkan kunci dan hapus dengan unset jika ditemukan:

if (($key = array_search('strawberry', $array)) !== false) {
    unset($array[$key]);
}

array_search mengembalikan false (null hingga PHP 4.2.0) jika tidak ada item yang ditemukan.

Dan jika ada beberapa item dengan nilai yang sama, Anda dapat menggunakan array_keys untuk mendapatkan kunci untuk semua item:

foreach (array_keys($array, 'strawberry') as $key) {
    unset($array[$key]);
}

Gunakan array_diff() untuk solusi 1 baris:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

... Tidak perlu fungsi tambahan atau foreach loop.

if (in_array('strawberry', $array)) 
{
    unset($array[array_search('strawberry',$array)]);
}

Jika Anda menggunakan array biasa di sini (yang terlihat seperti kasing), Anda harus menggunakan kode ini sebagai gantinya:

if (($key = array_search('strawberry', $array)) !== false) {
    array_splice($array, $key, 1);
}

unset($array[$key]) hanya menghapus elemen tetapi tidak menyusun ulang susunan polos.

Sepertinya kita memiliki sebuah array dan menggunakan array_splice:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array); 
// yields the array ['Apple', 'orange', 'blueberry', 'kiwi']

Dibandingkan dengan tidak disetel:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "Apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

Perhatikan bagaimana unset($array[$key]) tidak menyusun ulang susunan.

$arr = \array_filter($arr, function ($v) { return $v != 'some_value'; }

Ini adalah pengulangan sederhana yang dapat menghapus beberapa nilai dalam array.

    // Your array
    $list = array("Apple", "orange", "strawberry", "lemon", "banana");

    // Initilize what to delete
    $delete_val = array("orange", "lemon", "banana");

    // Search for the array key and unset   
    foreach($delete_val as $key){
        $keyToDelete = array_search($key, $list);
        unset($list[$keyToDelete]);
    }

Saat ini saya menggunakan fungsi ini:

function array_delete($del_val, $array) {
    if(is_array($del_val)) {
         foreach ($del_val as $del_key => $del_value) {
            foreach ($array as $key => $value){
                if ($value == $del_value) {
                    unset($array[$key]);
                }
            }
        }
    } else {
        foreach ($array as $key => $value){
            if ($value == $del_val) {
                unset($array[$key]);
            }
        }
    }
    return array_values($array);
}

Anda dapat memasukkan array atau hanya sebuah string dengan elemen yang harus dihapus . Tulis seperti ini:

$detils = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'Apple'), $detils);

OR

$detils = array_delete('orange', $detils);

Itu juga akan mengindeks ulang.

Akan seperti ini:

 function rmv_val($var)
 {
     return(!($var == 'strawberry'));
 }

 $array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

 $array_res = array_filter($array, "rmv_val");

Array jawaban ke PHP dihapus berdasarkan nilai (bukan kunci) Diberikan oleh https://stackoverflow.com/users/924109/rok-kralj

IMO adalah jawaban terbaik karena menghilangkan dan tidak bermutasi 

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

Ini menggeneralisasi dengan baik, Anda dapat menghapus elemen sebanyak yang Anda suka pada saat yang sama, jika Anda mau.

Penafian: Perhatikan bahwa solusi saya menghasilkan salinan array baru sambil mempertahankan yang lama berbeda dengan jawaban yang diterima yang bermutasi. Mungkin sedikit lebih lambat karena ini.

Pendekatan yang lebih baik mungkin untuk menjaga nilai Anda sebagai kunci dalam array asosiatif, dan kemudian panggil array_keys() di atasnya ketika Anda ingin array aktual. Dengan begitu Anda tidak perlu menggunakan array_search untuk menemukan elemen Anda.

Pertanyaan ini memiliki beberapa jawaban tetapi saya ingin menambahkan sesuatu lebih karena ketika saya menggunakan unset atau array_diff saya memiliki beberapa masalah untuk bermain dengan indeks array baru ketika elemen tertentu dihapus (karena indeks awal disimpan)

Saya kembali ke contoh:

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

atau

$array = array('Apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

Jika Anda mencetak hasilnya, Anda akan mendapatkan:

foreach ($array_without_strawberries as $data) {
   print_r($data);
}

Hasil:

> Apple
> orange
> blueberry
> kiwi

Tetapi indeks akan disimpan dan Anda akan mengakses elemen Anda seperti:

$array_without_strawberries[0] > Apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

Dan array terakhir tidak diindeks ulang. Jadi, Anda perlu menambahkan setelah unset atau array_diff:

$array_without_strawberries = array_values($array);

Setelah itu array Anda akan memiliki indeks normal:

$array_without_strawberries[0] > Apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

Terkait dengan posting ini: Re-Index Array

 

Cara menggunakan array splice php

Semoga ini bisa membantu

$remove= "strawberry";
$array = ["Apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
        if ($value!=$remove) {
        echo $value.'<br/>';
                continue;
        }
}

Saya mencari jawaban untuk pertanyaan yang sama dan menemukan topik ini. Saya melihat dua cara utama: kombinasi array_search & unset dan penggunaan array_diff. Sekilas, menurut saya metode pertama akan lebih cepat, karena tidak memerlukan penciptaan array tambahan (seperti ketika menggunakan array_diff). Tapi saya menulis patokan kecil dan memastikan bahwa metode kedua tidak hanya lebih ringkas, tetapi juga lebih cepat! Senang berbagi ini dengan Anda. :) 

https://glot.io/snippets/f6ow6biaol

<?php 
$array = array("Apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>

Saya lebih suka menggunakan array_key_exists untuk mencari kunci dalam array seperti: 

Array([0]=>'A',[1]=>'B',['key'=>'value']) 

untuk menemukan yang ditentukan secara efektif, karena array_search dan in_array () tidak berfungsi di sini. Dan jangan menghapus barang dengan unset () .

Saya pikir itu akan membantu seseorang.

Buat array numerik dengan menghapus nilai Array tertentu

    <?php
    // create a "numeric" array
    $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');

    //Normarl display
    print_r($animals);
    echo "<br/><br/>";

    //If splice the array
    //array_splice($animals, 2, 2);
    unset($animals[3]); // you can unset the particular value
    print_r($animals);

    ?>

Anda Dapat Merujuk tautan ini ..