foreach ($array)
artık o öğeyi içeren böyle bir PHP diziden bir öğeyi silmek için kolay bir yol var mı?
Ben null ayarlayarak bunu düşündüm, ama görünüşe göre değil.
Kullanmak unset
a>:
<?php
$x = array(1, 2);
unset($x[0]);
var_dump($x);
?>
... Bu verir:
array(1) {
[1]=>
int(2)
}
(Endeks değişmeden kalır dikkat edin.)
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
Bu yüzden array_splice()
can be used if you'd like to normalize your integer keys. Another option is using array_values()
after unset()
a>:
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
// our initial array
$arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
print_r($arr);
// remove the elements who's values are yellow or red
$arr = array_diff($arr, array("yellow", "red"));
print_r($arr);
Bu yukarıdaki kod çıktısı:
Array ( [0] => blue [1] => green [2] => red [3] => yellow [4] => green [5] => orange [6] => yellow [7] => indigo [8] => red )
Array ( [0] => blue [1] => green [4] => green [5] => orange [7] => indigo )
Şimdi, array_values () güzel bir sayısal dizi reindex, ancak diziden tüm anahtar dizeleri kaldırmak ve numaraları ile bunların yerini alacak. Eğer anahtar adları (dizeler) korumak, ya da tüm tuşlar sayısal ise dizi reindex gerekiyorsa, array_merge kullanın ():
$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);
çıkışlar
Array ( [0] => blue [1] => green [2] => green [3] => orange [4] => indigo )
Eğer tüm değerler benzersiz (ya da benzersiz olmayan ancak belirli bir değerin tüm örneklerini kaldırmak isteyen) bir sayısal indisli bir dizi varsa, sadece bu gibi bir eşleşen bir öğe kaldırmak için () array_diff kullanabilirsiniz:
$my_array = array_diff($my_array, array('Value_to_remove'));
Örneğin:
$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);
Bu aşağıdakileri görüntüler:
4
3
Sizeof () başlangıç dizisi için bir 4 boyutunu rapor aramaları ve çıkarılmasından sonra, 3 ile kontrol edilebilir, bu örnekte, değer 'Charles' ile öğe çıkarılır.
unset () belirtilen değişkenleri yok.
Bir işlev içinde unset () ve davranış yok etmek için çalışıyorsunuz değişkenin türüne bağlı olarak değişebilir.
Küreselleşmiş bir değişkeni bir işlev içinde () unset ise, sadece yerel değişken yok edilir. Çağıran ortamda değişkeni () unset denilen daha önce olduğu gibi aynı değerini muhafaza edecektir.
<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>
Yukarıdaki kod cevap olacak bar
Bir işlev içinde) (global bir değişken unset
<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>
Ben sadece (bu temelde bir tablo eşleme ve ben tablodaki sütunları değişen değişkendir özelliklerini vardı, belirli bir nesne vardı söylemek istiyorum, bu nedenle tabloyu yansıtan nesne özellikleri, hem de değişiklik olur
class obj {
protected $fields = array('field1','field2');
protected $field1 = array();
protected $field2 = array();
protected loadfields(){} // This will load the $field1 and $field2 with
// rows of data for the column they describe
protected function clearFields($num){
foreach($fields as $field) {
unset($this->$field[$num]); // This did not work
// the line below worked
unset($this->{$field}[$num]); // You have to resolve $field first using {}
}
}
}
$ Alanların bütün amacı bu yüzden ben sadece sınıfın başında bakmak ve yansıtmak için niteliklerin listesini ve $ alanlar dizi içeriğini değiştirmek, onlar değişti yaparken kod her yerde bakmak zorunda değilsiniz, sadece oldu yeni niteliklerdir.
Bu anlamaya biraz zaman aldı. Bu birisi yardımcı olabilir umuyoruz.