PHP: приведение к (массив) и возвращаемый тип: массив не то же самое? - PullRequest
4 голосов
/ 20 августа 2010

У меня следующая проблема в PHP:

print_r() говорит, что это то же самое, gettype() говорит, что тот же тип, но последний вывод работает не для обоих случаев, хотя они должны быть одинаковыми!

Это выглядит очень странно для меня.

код и вывод:

$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]);

Вывод:

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 и out2 должны датьте же результаты, но не.

Возможно, у меня есть подсказка?

1 Ответ

5 голосов
/ 20 августа 2010

Есть несколько ошибок в PHP:

Здесь происходит то же самое:

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

Это происходит потому, что «0» используется в качестве ключа массива строк, тогда как $ arr [0] ищет ключ массива целых чисел. Это задокументировано в документации PHP просто: целочисленные свойства недоступны ( ссылка ).

...