我有两个php函数,一个返回一个JSON数组,另一个尝试解码它并访问它的内容以便从中删除一个URL。我的问题是我得到以下错误..
1)json_decode()期望参数1为字符串
2)第77行为foreach()提供的参数无效
这是我的代码
php file 1
<?php
function getAnimation($userid, $db) {
include('connect.php');
$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error() . "please contact d.g.folksman@ljmu.ac.uk for technical assistance";
echo "<br>";
}
$box_num = 1;
$select = "SELECT card_id, order_num FROM decks WHERE box_num=$box_num AND id=$userid ORDER BY order_num";
$result = mysqli_query($db, $select) or die("SQL Error 1: " . mysqli_error($db));
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
$users[] = array(
'card_id' => $row['card_id'],
'order_num' => $row['order_num'],
);
}
json_encode($users);
return $users;
mysqli_close($db);
}
?>
php文件2的片段,它试图解码JSON数组并访问其内容。
include('getAnimation.php');
$animation = getAnimation($result_array[0], $db); //<< atempting to access returned array here
$obj = json_decode($animation); //FIRST ERROR HERE
foreach ($obj->card_id as $item) { // SECOND ERROR HERE
$url = ($item->card_id);
echo $url; //show me the money
}
感谢您提供任何帮助!
答案 0 :(得分:2)
将return
修改为return json_encode($users)
。您实际上并未设置变量$users
...您也可以使用$users = json_encode($users)
进行设置,然后返回$users
。
要回答您的第二个问题,请修改您的代码:
foreach($obj as $item) {
$url = $item->card_id;
}
答案 1 :(得分:1)
json_decode()期望参数1为字符串
json_encode()
会返回一个值,它不会通过引用对参数执行操作,因此当您拥有:
json_encode($users);
return $users;
您将返回原始数组,而不是JSON表示。
通过执行以下操作进行修复:
return json_encode($users);
第77行为foreach()提供的参数无效
你编码一个数组,所以你应该解码一个数组 - 所以你应该循环遍历数组,而不是一个对象:
foreach ($obj->card_id as $item)
应该是:
foreach ($obj as $item) {
$url = $item["card_id"];
echo $url;
}
旁注
避免使用像$ obj和$ item这样的通用变量名称 - 它们不具有描述性,并且PHP可能有一些不寻常的范围怪癖,特别是如果你使用缓冲。
答案 2 :(得分:1)
更改
json_encode($users);
return $users;
为:
$users = json_encode($users);
return $users;
就是这样! : - )