【问题标题】:PHP Warning: Illegal string offset & Invalid argument supplied for foreach() [duplicate]PHP警告:为foreach()提供非法字符串偏移和无效参数[重复]
【发布时间】:2014-06-15 20:44:56
【问题描述】:

当没有任何结果时,会出现以下两个错误:

  • 中的非法字符串偏移“艺术家”
  • 为 foreach() 提供的参数无效

下面的代码匹配用户搜索的结果,并通过 last.fm API 返回信息,执行此操作的代码位于不同的文件中,不会导致问题。

当没有搜索结果并且 foreach 循环尝试没有数据时会出现问题。需要的是某种错误捕获,而我尝试过的任何方法都没有奏效。

由于它是一个 foreach 循环,因此 try,catch 语句似乎不起作用。

if(!isset($json['results']['artistmatches']['artist'][0]))
    {  
    echo '<div class="alert  alert-danger">Artists Not Found</div>';
    }
    else 
    { 
        foreach ($json['results']['artistmatches']['artist'] as $track) 
        {
            $artist = $track['name'];
            $image = $track['image'][3]['#text'];
            $url =  preg_replace("/ /s","_" , $artist); 
            if($artist&&$image)
            {
                include('./artist_short.php');      
            }
        }

    }

【问题讨论】:

  • 不是重复的,在这个问题上我确实尝试过这种方法,但是我没有包含某些数组字段。
  • 另一种是通用解决方案,我尝试过但没有奏效;因此,我按照应有的方式使用了这个网站,询问社区是否知道解决方案。正如您在解决方案中看到的那样,我不会想到将结果和艺术家匹配而不是艺术家添加到 is_array 语句中,因此这就是它不同的原因。
  • 当我尝试使用该解决方案但它不起作用时,我询问了提供对我有用的解决方案的社区,允许它使用相同的 is_array 函数,但这就是相似之处。请不要对此感到生气,但我觉得您的目的是贬低他人,并且您认为我是那种如果可以的话会禁止我访问该网站的人。我寻求帮助,当我找不到其他解决方案时,我得到了帮助。
  • 我又发帖讨论了

标签: php error-handling warnings


【解决方案1】:

添加一个 if 语句来检查结果是否是一个数组。

if(is_array($json['results']['artistmatches'])) {

    foreach ($json['results']['artistmatches']['artist'] as $track) 
    {
        $artist = $track['name'];
        $image = $track['image'][3]['#text'];
        $url =  preg_replace("/ /s","_" , $artist); 

        if($artist&&$image)
        {
            include('./artist_short.php');      
        }
    }
} else {
 //handle case where the condition doesn't match.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 2014-01-30
    • 2012-11-13
    • 2019-03-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多