【问题标题】:PHP ArrayUndefinedOffset But Why?PHP 数组未定义的偏移量,但为什么?
【发布时间】:2016-04-04 19:15:09
【问题描述】:

我有如下数据集,我的表列之一让我们说价格列以 json 格式存储价格,示例如下。

<?php 
       $dataSet[] = array(
            "product_id" => 1,
            "prices" => '{"1":"29990", "2": "10000"}'
        );

        foreach ($dataSet as $dataRow) 
        {
            $pricesStdClassObject = json_decode($dataRow['prices']);

            // Convert stdClass Object into array
            $pricesArray = (array) $pricesStdClassObject;

            print_r($pricesArray);
        }
?>

print_r($pricesArray)的输出如下

    Array ( [1] => 29990 [2] => 10000 )

那为什么print_r($pricesArray[1])给我错误

    A PHP Error was encountered
    Severity: Notice
    Message: Undefined offset: 1

但是为什么呢?

【问题讨论】:

  • "输出应该如下所示" - 那么输出是什么?您能阅读How to Ask 并提供minimal reproducible example 吗?这里有一些不相关的代码,并且缺少实际输出。
  • 如果您查看 foreach 正文,我在浏览器中调试 $pricesArray 数组( [1] => 29990 [2] => 10000 )意味着它是一个数组,但是当我访问第一个索引值,例如 echo $pricesArray[1] 为什么它给了我未定义的偏移量
  • 有什么帮助或建议吗?
  • 您的代码为我打印Array ( [1] =&gt; 29990 [2] =&gt; 10000 )
  • 是的,但是如果您尝试获取索引 1 的值,那么它会给您错误

标签: php arrays undefined offset


【解决方案1】:

最后我找到了解决方案:

根据here 和论坛here 的文档,我找到了与此方法一起使用的 json_decoded 方法的 'assoc' 参数,默认情况下它的值为 FLASEjson_decoded 如果您希望将返回的 object 转换为关联 ,则返回 stdClass 对象数组s 那么你必须将 'assoc' 参数值设置为 TRUE,如下所示。

$pricesStdClassObject = json_decode($dataRow['prices'], TRUE);

所以上面的示例代码会变成这样

<?php 
       $dataSet[] = array(
            "prices" => '{"1":"29990", "2": "10000"}'
        );

        foreach ($dataSet as $dataRow) 
        {
            $pricesArray = json_decode($dataRow['prices'], TRUE);

            // returned objects will be converted into associative arrays. 
            print_r($pricesArray);
        }
?>

然后您可以访问索引值而不会出现错误消息:)

         print_r($pricesArray[1]);    output: 29990

Array type cast with json decoded StdClass Objects 不能正常工作,如果你使用 'assoc' 可以跳过下面这段代码 参数。

     // Convert stdClass Object into array
     $pricesArray = (array) $pricesStdClassObject;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多