我正在使用亚马逊产品API。
$ItemAttr = $Item['ItemAttributes'];
现在$ItemAttr
包含一个多维数组。
if(is_array($ItemAttr["Author"])){$Author = implode(", ", $ItemAttr["Author"]);
}else{
$Author = $ItemAttr["Author"];}
现在当我使用上面的代码时,我得到了Undefined index: Author in line 1 and line 3
我试过这个
if(isset($ItemAttr["Author"])) {
if(is_array($ItemAttr["Author"])){$Author = implode(", ", $ItemAttr["Author"]);
}else{
$Author = $ItemAttr["Author"];}
}
它消除了这个错误。
但稍后,当我使用这样的代码$RetVal = array( 'Author' => $Author);
时,我收到Undefined variable : Author
错误
有谁能告诉我正确的方法?
请注意:$Item['ItemAttributes'];
可能包含也可能不包含Author
密钥。我的意思是如果返回的产品是一本书,该数组将返回作者密钥。否则它不会......
答案 0 :(得分:2)
在顶部初始化空变量$Author
?
$Author = ""; //initialize here
if(isset($ItemAttr["Author"]))
{
if(is_array($ItemAttr["Author"]))
{
$Author = implode(", ", $ItemAttr["Author"]);
}
else
{
$Author = $ItemAttr["Author"];
}
}
答案 1 :(得分:2)
我上个月实施了亚马逊书籍api,我记得这个问题完全相同。你有多幸运,因为我没有让我帮忙:(
亚马逊非常讨厌,因为他们返回的结构中没有一致性(好吧,除了下面的内容,但是这会让消费变得烦人):
我个人认为他们应该至少使用空数组,并坚持使用数组。您始终可以将对象添加到数组><但至少结构是一致的。
我绕过它的方式是创建一个返回结构的新表示,保证一切都是一个数组,并且整个结构是预先定义的。通过这种方式,我可以在以后访问数据时100%知道它不会给我带来错误,就像它不存在一样,或者当它是一个数组时被作为对象访问。
首先,按照以下方式创建结构:
$ structure = array( 'isbn'=> ', 'authors'=>阵列(), 'pictures'=>阵列(), 'title'=> “” );
然后创建一个函数或对象方法(取决于您的样式)以使用返回的amazon数据并找到它可以将其插入到自定义结构中。
请记住检查它是否存在,然后检查它是一个数组还是一个对象,以便您知道如何访问它。它有助于从亚马逊打印出一些返回的结果和一些不同的书籍。
然后,要访问有关该书的详细信息,您可以依赖$结构中的数据;)所有内容都是一个数组,并保证一切都存在,这样做:
foreach($ structure ['authors'] ...
不会产生错误,它不是数组,不存在或实际上是对象!!!
伪代码的种类是:
$returned_amazon_data = get_amazon_data('http://amazon.com/api/book=1234567');
$book = consume_amazon_result($returned_amazon_data);
if ($book) {
//print out the authors, if no authors were found, will just stay blank as it's GUARANTEED to always be an array of strings
print implode($book['authors']);
}
玩得开心!我知道我做过(nt)......
答案 2 :(得分:1)
您可以组合两个条件语句,也可以预定义$Author
:
$Author = '';
if(isset($ItemAttr["Author"]) && is_array($ItemAttr["Author"])){
$Author = implode(", ", $ItemAttr["Author"]);
}elseif(isset($ItemAttr["Author"])){
$Author = $ItemAttr["Author"];
}
这应该消除这两个错误。