PHP, hangi koşullar altında yapan bir unset () dizi dizini sıfırlamak diyorsun?

0 Cevap

Dizi çözümlenmiş bir SimpleXML ile birlikte unset işlevini kullanırken ben bir garip sorunu buldum. unset function (sayısal endeksli olan) böyle bir dizi indeksi birinde uygulanan, dizi indeksi sıfırlamak gibi görünüyor.

Bu benim (ya da bir böcek gibi daha fazla) belgelenmemiş bir davranış gibi görünüyor. Herkes bir açıklama neden SimpleXML diziler için bir "özel endeksleme" tedavisi var var?

İşte onu açıklayan bir test durumda bulunuyor.

<?php
$a = array( 1, 2, 3, 4 );
echo "Regular array, before unset(\$a[1]): " . print_r( $a, 1 );
unset( $a[1] );
echo "Regular array, after unset(\$a[1]): " . print_r( $a, 1 );

$xml = simplexml_load_string( <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node>1</node>
<node>2</node>
<node>3</node>
<node>4</node>
<node>5</node>
</root>
EOT
 );

echo "SimpleXML array, before unset(\$a[1]): " . print_r( $xml, 1 );
unset( $xml->node[1] );
echo "SimpleXML array, after unset(\$a[1]): " . print_r( $xml, 1 );

Ben olsun çıktı,

Regular array, before unset($a[1]): Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
Regular array, after unset($a[1]): Array
(
    [0] => 1
    [2] => 3
    [3] => 4
)
SimpleXML array, before unset($a[1]): SimpleXMLElement Object
(
    [node] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )

)
SimpleXML array, after unset($a[1]): SimpleXMLElement Object
(
    [node] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 4
            [3] => 5
        )

)

0 Cevap