【问题标题】:PHP: cast to (array) and return-type: array is not the same?PHP: cast to (array) 和 return-type: array 不一样?
【发布时间】:2011-04-01 11:15:55
【问题描述】:

我在 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
--------------------------------------
--------------------------------------

out1out2 应该会产生相同的结果,但不会。

也许有人对我有提示?

【问题讨论】:

  • 您发布的代码与给定的输出不对应。输出以两行“------”结束,但代码仅在“out2”之后打印一行。当您针对此类奇怪问题发布代码示例时,请不要对其进行编辑,并注意重现为您提供显示输出的准确代码。
  • 错误报告是否开启? print_r 没有任何输出通常应该伴随着错误。
  • @borealid:好的,下次我会这样做。除了最后一行破折号外,代码未经编辑。@deceze;错误报告说 Notice: Undefined offset: 0 on line xy --> line is: (print_r($docdatau2[0]);)

标签: php variables types casting return-type


【解决方案1】:

有几个关于它的 PHP 错误:

同样的事情发生在这里:

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

这是因为“0”用作字符串数组键,而 $arr[0] 搜索整数数组键。它被记录在 PHP 文档中,只需说明:整数属性不可访问 (link)。

【讨论】:

  • 这应该是答案。谢谢。我认为 php 是一种丑陋的语言。你不能指望这样的行为。而不是修复它,它变成了一个“不是错误的已知问题”。我希望这样的事情在 PHP 中不要经常出现。
  • 别指望它。这是相当典型的行为。
  • 你到底是什么行为?错误被声明为已知问题?或者不能根据它们的来源以相同的方式使用 2 个变量的相同内容?那么如何确定一个数组是“真实”数组还是铸造对象? gettype 和 print_r 在这两种情况下都是相同的。区别在哪里?整数键不可访问..嗯..它是否以可访问整数键存在的其他方式存在?谁不能访问该密钥? print_r 可以读取密钥,而强制转换运算符可以写入密钥。所以它对我来说存在。我认为这显然是一个错误..
  • 错误被声明为已知问题。您可以使用 foreach 循环访问密钥。
  • 好的,我怎样才能确定一个数组是“真实”数组还是转换对象?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2022-12-01
  • 2016-12-21
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多