0

私は 2 つの php 関数を持っています。1 つは JSON 配列を返し、もう 1 つはそれをデコードしてその内容にアクセスし、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

を に変更returnしますreturn json_encode($users)。実際に変数を設定しているわけではありません$users... で設定して$users = json_encode($users)から returnにすることもできます$users

2 番目の質問に答えるには、コードを次のように変更します。

foreach($obj as $item) {
    $url = $item->card_id;
}
于 2013-06-12T22:14:38.960 に答える
1

変化する

json_encode($users);
return $users;

に:

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

それでおしまい!:-)

于 2013-06-12T22:17:33.393 に答える
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 に答える