【问题标题】:Warning: Illegal string offset PHP 7 foreach警告:非法字符串偏移 PHP 7 foreach
【发布时间】:2020-06-11 21:19:57
【问题描述】:

使用 php curl。我正在获取一组数据。我想从中获取以下数据

if(is_array($jsonRes['prod']['ret']['ProdIt'])){
    foreach($jsonRes['prod']['ret']['ProdIt'] as $obRes){
        $arP["ARTI"] = $obRes['Article'];
        $arP["ALT"] = $obRes['Name'];
        $arP["BR"] = $obRes['Brand'];

我收到一个错误:

警告:第 48 行 /........php 中的非法字符串偏移 'Article'

警告:第 49 行 /...........php 中的非法字符串偏移量“名称”

警告:第 50 行 /...........php 中的非法字符串偏移 'Brand'

这是一个数组

Array
(
    [ret] => Array
        (
            [ProductsItemCount] => 1
            [ProdIt] => Array
                (
                    [Code] => 0789087
                    [Article] => 3011317
                    [Name] => Price cash
                    [Brand] => HATTAT
                    [Price] => 0
                    [Currency] => EUR
                    [Stock] => Array
                        (
                            [StockItem] => Array

错误并不总是发生。当数组看起来像这样时,它没有错误

Array
(
    [ret] => Array
        (
            [ProductsItemCount] => 2
            [ProdIt] => Array
                (
                    [0] => Array
                        (
                            [Code] => 908877677
                            [Article] => 8200892104
                            [Name] => Tovare
                            [Brand] => RENAULT
                            [Price] => 0
                            [Currency] => EUR
                            [Stock] => Array

【问题讨论】:

    标签: php arrays foreach php-7


    【解决方案1】:

    您需要检查ProdIt 是一维还是二维。在第一个示例中,它是单个关联数组,而不是关联数组的数组。

    $prodit = $jsonRes['prod']['ret']['ProdIt'];
    if (is_array($prodit)) {
        if (isset($prodit['Article'])) { // 1-dimensional, turn into 2-dimensional
            $prodit = array($prodit);
        }
        foreach ($prodit as $obRes) {
            ...
        }
    }
    

    【讨论】:

    • 我根据请求获取数据 $jsonRes = json_decode($json, true);每个请求创建一个不同的数组?当显示 1 个错误时,当 2 个错误不存在时?
    • 有些 API 像这样很烦人。它们不是返回一个包含 1 个元素的数组,而是返回元素本身,所以你必须特别对待这种情况。
    • 非常感谢巴尔玛。
    猜你喜欢
    • 2019-03-01
    • 2013-04-11
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多