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.
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 !== ''; }));
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);
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');
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 :)
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:
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.
Hal ini saya menyarankan kode:
$myarray = array_values(array_filter(array_map('trim', $myarray), 'strlen'));
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.
$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);
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"
}
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
Yang paling sebagai jawaban salah atau setidaknya tidak sepenuhnya benar karena OP berbicara tentang string kosong saja. Berikut ini's menyeluruh penjelasan:
Pertama-tama, kita harus setuju pada apa kosong berarti. Apakah anda bermaksud menyaring:
$elemen === false
)kosong()
fungsi?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);
function trim_array($Array)
{
foreach ($Array as $value) {
if(trim($value) === '') {
$index = array_search($value, $Array);
unset($Array[$index]);
}
}
return $Array;
}
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.