Menghapus elemen array kosong

Beberapa elemen dalam array string kosong berdasarkan apa yang pengguna telah disampaikan. Saya perlu untuk menghapus elemen-elemen. Aku punya ini:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

Tapi itu doesn't bekerja. $linksArray masih memiliki unsur-unsur yang kosong. Saya juga mencoba melakukan itu dengan empty() fungsi, tetapi hasilnya adalah sama.

Mengomentari pertanyaan (2)
Larutan

Seperti yang anda're berhadapan dengan sebuah array dari string, anda hanya dapat menggunakan array_filter(), yang terletak menangani semua ini untuk anda:

print_r(array_filter($linksArray));

Perlu diingat bahwa jika tidak ada callback yang disediakan, semua entri dari array sama dengan PALSU (lihat konversi ke boolean) akan dihapus. Jadi jika anda perlu untuk melestarikan unsur-unsur yang ada yaitu string yang tepat'0', anda akan perlu kustom callback:

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));
Komentar (13)

Anda dapat menggunakan array_filter untuk menghapus unsur-unsur yang kosong:

$emptyRemoved = array_filter($linksArray);

Jika anda memiliki (int) 0 dalam array, anda dapat menggunakan berikut:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

EDIT: Mungkin anda unsur-unsur yang tidak kosong per se, tetapi mengandung satu atau lebih ruang... Anda dapat menggunakan berikut sebelum menggunakan array_filter

$trimmedArray = array_map('trim', $linksArray);
Komentar (4)

Jawaban yang paling populer pada topik ini benar-benar SALAH.

Pertimbangkan hal berikut script PHP:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

Mengapa ini? Karena string yang mengandung tunggal '0' karakter juga mengevaluasi ke boolean false, jadi meskipun itu's bukan string kosong, masih akan disaring. Itu akan menjadi sebuah bug.

Lewat built-in fungsi strlen sebagai fungsi penyaringan akan bekerja, karena itu kembali non-integer nol untuk non-string kosong, dan sebuah integer nol untuk string kosong. Non-nol bilangan bulat selalu mengevaluasi ke true bila dikonversi ke boolean, sedangkan nol bilangan bulat selalu mengevaluasi ke false bila dikonversi ke boolean.

Jadi, mutlak, yang pasti, jawaban yang benar adalah:

$arr = array_filter($arr, 'strlen');
Komentar (6)
$linksArray = array_filter($linksArray);

"Jika tidak ada callback yang diberikan, semua entri input sama dengan PALSU akan dihapus." -- http://php.net/manual/en/function.array-filter.php

Komentar (3)
    $myarray = array_filter($myarray, 'strlen');  //removes null values but leaves "0"
    $myarray = array_filter($myarray);            //removes all null values
Komentar (1)

Anda hanya dapat melakukan

array_filter($array)

array_filter: "Jika tidak ada callback yang diberikan, semua entri input sama dengan PALSU akan dihapus." Ini berarti bahwa elemen-elemen dengan nilai NULL, 0, '0', '', PALSU, array() akan dihapus juga.

Pilihan lainnya adalah melakukan

array_diff($array, array(''))

yang akan menghapus elemen dengan nilai-nilai NULL, '' dan PALSU.

Semoga ini bisa membantu :)

UPDATE

Berikut ini adalah contoh.

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

Untuk meringkas:

  • 0 atau '0' akan menghapus 0 dan '0'
  • NULL, FALSE atau '' akan menghapus NULL, FALSE dan ''
Komentar (1)
foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 
Komentar (3)

Satu lagi kapal untuk menghapus kosong ("" string kosong) elemen-elemen dari array.

$array = array_filter($array, function($a) {return $a !== "";});

Catatan: kode Ini sengaja membuat null, 0 dan palsu elemen.


Atau mungkin anda ingin memangkas elemen array pertama:

$array = array_filter($array, function($a) {
    return trim($a) !== "";
});

Catatan: kode Ini juga menghilangkan null dan palsu elemen.

Komentar (4)

Dalam waktu singkat:

Hal ini saya menyarankan kode:

$myarray =  array_values(array_filter(array_map('trim', $myarray), 'strlen'));

Penjelasan:

Aku berpikir menggunakan array_filter adalah baik, tetapi tidak cukup, karena nilai-nilai yang sama seperti ruang dan \n,... simpan di array dan ini biasanya buruk.

Jadi saya sarankan anda menggunakan campuran array_filter dan array_map.

array_map adalah untuk pemangkasan, array_filter adalah untuk menghapus nilai-nilai kosong, strlen adalah untuk menjaga 0 nilai', dan array_values adalah untuk kembali pengindeksan jika anda diperlukan.

Contoh:

$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");

// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);

// "a"
$new2 = array_filter(array_map('trim', $myarray));

// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');

// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

var_dump($new1, $new2, $new3, $new4);

Hasil:

array(5) {
  [0]=>
" string(1) "
  [1]=>
  string(1) "
"
  [2]=>
  string(2) "
"
  [4]=>
  string(1) " "
  [6]=>
  string(1) "a"
}
array(1) {
  [6]=>
  string(1) "a"
}
array(2) {
  [5]=>
  string(1) "0"
  [6]=>
  string(1) "a"
}
array(2) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "a"
}

Online Test:

http://phpio.net/s/5yg0

Komentar (0)

Jika anda bekerja dengan numerik array dan perlu re-index array setelah mengeluarkan unsur-unsur yang kosong, gunakan array_values fungsi:

array_values(array_filter($array));

Juga melihat: https://stackoverflow.com/questions/7558022/php-reindex-array

Komentar (0)

Yang paling sebagai jawaban salah atau setidaknya tidak sepenuhnya benar karena OP berbicara tentang string kosong saja. Berikut ini's menyeluruh penjelasan:

Apa empty berarti?

Pertama-tama, kita harus setuju pada apa kosong berarti. Apakah anda bermaksud menyaring:

  1. the string kosong hanya ("")?
  2. the benar-benar palsu nilai-nilai? ($elemen === false)
  3. the falsey nilai-nilai? (yaitu 0, 0.0, "", "0", NULL, array()...)
  4. setara dengan PHP's kosong() fungsi?

Bagaimana anda menyaring nilai-nilai

Untuk menyaring string kosong hanya:

$filtered = array_diff($originalArray, array(""));

Hanya menyaring benar-benar palsu nilai-nilai, anda harus menggunakan panggil ulang fungsi:

$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
    return $var === false;
}

Callback ini juga berguna untuk setiap kombinasi yang anda inginkan untuk menyaring "falsey" nilai-nilai, kecuali beberapa. (Misalnya, menyaring setiap null dan palsu, dll, hanya menyisakan 0):

$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
    return ($var === 0 || $var === '0');
}

Ketiga dan keempat kasus (untuk tujuan kita pada akhirnya) setara, dan untuk itu semua anda harus menggunakan default:

$filtered = array_filter($originalArray);
Komentar (1)

Aku harus melakukan ini dalam rangka untuk menjaga sebuah array nilai dari (string) 0

$url = array_filter($data, function ($value) {
  return (!empty($value) || $value === 0 || $value==='0');
});
Komentar (0)
$a = array(1, '', '', '', 2, '', 3, 4);
$b = array_values(array_filter($a));

print_r($b)
Komentar (1)
function trim_array($Array)
{
    foreach ($Array as $value) {
        if(trim($value) === '') {
            $index = array_search($value, $Array);
            unset($Array[$index]);
        }
    }
    return $Array;
}
Komentar (0)
$out_array = array_filter($input_array, function($item) 
{ 
    return !empty($item['key_of_array_to_check_whether_it_is_empty']); 
}
);
Komentar (0)

Untuk array multidimensi

$data = array_map('array_filter', $data);
$data = array_filter($data);
Komentar (0)

Saya menggunakan script berikut untuk menghapus unsur-unsur yang kosong dari array


for ($i=0; $i
Komentar (0)

Hanya ingin berkontribusi alternatif untuk loop...juga mengatasi kesenjangan di kunci...

Dalam kasus saya saya ingin menjaga berurutan kunci array ketika operasi telah selesai (tidak hanya angka ganjil, yang adalah apa yang saya menatap. Menyiapkan kode untuk terlihat ganjil kunci tampak rapuh untuk saya dan masa depan-friendly.)

Aku sedang mencari sesuatu yang lebih seperti ini: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/

Kombinasi array_filter dan array_slice melakukan trik.

$contoh = array_filter($contoh); $contoh = array_slice($contoh,0);

Tidak ada gagasan tentang efisiensi atau tolok ukur tetapi bekerja.

Komentar (1)
foreach($arr as $key => $val){
   if (empty($val)) unset($arr[$key];
}
Komentar (1)
$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");   

foreach ($my as $key => $value) {
    if (is_null($value)) unset($my[$key]);
}

foreach ($my as $key => $value) {
    echo   $key . ':' . $value . '<br>';
} 

keluaran

1:5

2:6

Komentar (0)