0

我有两个 php 函数,一个返回一个 JSON 数组,另一个尝试对其进行解码并访问它的内容,以便从中删除一个 URL。我的问题是我收到以下错误..

1) json_decode() 期望参数 1 是字符串

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
}

谢谢你提供的所有帮助!

4

3 回答 3

2

修改returnreturn json_encode($users). 您实际上并没有设置变量$users......您也可以使用 设置它$users = json_encode($users),然后 return $users

要回答您的第二个问题,请修改您的代码,如下所示:

foreach($obj as $item) {
    $url = $item->card_id;
}
于 2013-06-12T22:14:38.960 回答
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 可能有一些不寻常的范围界定怪癖,尤其是在使用缓冲的情况下。

于 2013-06-12T22:15:10.290 回答
1

改变

json_encode($users);
return $users;

到:

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

就是这样!:-)

于 2013-06-12T22:17:33.393 回答