4 Stimmen

PHP: cast to (array) und return-type: array ist nicht dasselbe?

Ich habe folgendes Problem in PHP:

print_r() sagt, dass es dasselbe ist, gettype() sagt gleichen Typ, aber die letzte Ausgabe funktioniert nicht für beide Fälle, obwohl sie gleich sein sollten!

Das sieht für mich sehr seltsam aus.

Code und Ausgabe:

$docdatau = get_object_vars(json_decode($docdata));
$docdatau2 = (array)json_decode($docdata);

echo "1\n";
echo gettype($docdatau);
echo "\n";
echo "--------------------------------------\n";
print_r($docdatau);
echo "--------------------------------------\n";

echo "2\n";
echo gettype($docdatau2);
echo "\n";
echo "--------------------------------------\n";
print_r($docdatau2);

echo "out1\n";
echo "--------------------------------------\n";
print_r($docdatau[0]);
echo "out2\n";
echo "--------------------------------------\n";
print_r($docdatau2[0]);

Das Ergebnis:

1
array
--------------------------------------
Array
(

    [0] => stdClass Object
        (
            [produkt] => Produkt 2
            [laufzeit] => 24
            [addtext] => sdsd
            [provision] => 39
        )

    [1] => stdClass Object
        (
            [produkt] => Produkt 1
            [laufzeit] => 
            [addtext] => 
            [provision] => 0
        )

)
--------------------------------------
2
array
--------------------------------------

Array
(

    [0] => stdClass Object
        (
            [produkt] => Produkt 2
            [laufzeit] => 24
            [addtext] => sdsd
            [provision] => 39
        )

    [1] => stdClass Object
        (
            [produkt] => Produkt 1
            [laufzeit] => 
            [addtext] => 
            [provision] => 0
        )

)
out1
--------------------------------------
stdClass Object
(
    [produkt] => Produkt 2
    [laufzeit] => 24
    [addtext] => sdsd
    [provision] => 39
)
out2
--------------------------------------
--------------------------------------

out1 y out2 sollten die gleichen Ergebnisse liefern, tun es aber nicht.

Vielleicht hat jemand einen Tipp für mich?

5voto

Sjoerd Punkte 71416

Es gibt mehrere PHP-Fehler:

Das Gleiche passiert hier:

$obj->{0} = "hello";
$arr = (array)$obj;
echo $arr[0];

Dies geschieht, weil die "0" als String-Array-Schlüssel verwendet wird, während $arr[0] nach dem Integer-Array-Schlüssel sucht. Dies wird in der PHP-Dokumentation einfach durch die Angabe dokumentiert: Ganzzahlige Eigenschaften sind unzugänglich ( link ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X