如何解码php函数中返回的JSON数组


How do you decode a returned JSON array in php function

我有两个php函数,一个返回JSON数组,另一个尝试解码它并访问它的内容,以便从中剥离URL。我的问题是我得到以下错误…

json_decode()期望参数1为string

2)第77行

为foreach()提供了无效参数

我的代码

php文件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);
}
?>

试图解码JSON数组并访问其内容的php文件2的片段。

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
}

谢谢你能给的任何帮助!

return修改为return json_encode($users)。你实际上并没有设置变量$users…您也可以使用$users = json_encode($users)设置它,然后返回$users

要回答第二个问题,可以这样修改代码:

foreach($obj as $item) {
    $url = $item->card_id;
}

变化

json_encode($users);
return $users;

:

$users = json_encode($users);
return $users;

就是这样!: -)

json_decode()期望参数1为string

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可能有一些不寻常的作用域,特别是当你使用缓冲时。