gelen eleman silmek için dize yolunu kullanarak bunudiziden
$arr = [
'baz' => [
'foo' => [
'boo' => 'whatever'
]
]
];
gibi dizi dize girişini kullanarak değeri [ 'boo'] unset için yine de var mı var? O
$str = 'baz->foo->boo';
function array_unset($str, $arr) {
// magic here
unset($arr['baz']['foo']['boo']);
return $arr;
}
Bu cevap gibi
şey harika oldu ve bu Using a string path to set nested array data çalıştırmak Senaryomun ilk bölümü yapılmış. Ama tersine çeviremez. P.S. Eğer bir referans elemanı üzerinde tanımsız çağrı yapamazsınız yana
$str = 'bar,foo,boo';
function array_unset($str,&$arr) {
$path = explode(',',$str);
$buf = $arr;
for($i=0;$i<count($path)-1;$i++) {
$buf = &$buf[$path[$i]];
}
unset($buf);
}
Lanet ... zeki. Btw 2 soru var. 1) neden bölme kullanıyorsunuz? basit patlayabilir iş tamamen iyi. 2) neden referans olarak $ arg argüman koydunuz? – remtsoy
1) son haftalarda Qt/C# 'yı kullanarak,' split 'kullanma eğilimindeyken patlayabilir, sadece iyi idd çalışacaktır. 2) her zaman orijinal diziye bir referans tutmak gerekir, aksi halde unset sadece düğümü orijinal dizinin yerine kopyadan kaldıracaktır. –
Parametrede geçirilen dizi değişkeninin isminiz varsa $ GLOBALS kullanabilirsiniz. (doc'dan: _to unset() bir fonksiyonun içindeki global bir değişkeni, sonra $ GLOBALS dizisini kullanarak do_) – antoox