0

検索が間違っているのかもしれませんが、オブジェクト クラスを文字列で指定する方法が見つかりません。例:

データベースに json サイトのリストを保持し、foreach ループを実行して各サイトから特定のアイテムを取得します。ただし、各サイトの構造は異なります。

SITE 1: $result->Food->Price->Today;
SITE 2: $result->Pizza->Slice->discount;

「$result->Pizza->Slice->discount」を変数 (データベースで指定) に保持し、クラスから返そうとしています。

簡単に聞こえますが、私はクラス オブジェクトに不慣れで、配列からオブジェクトを作成する方法しか知りません。

4

3 に答える 3

1

この値をデータベースに保存します。

serialize(['Pizza', 'Slice', 'discount']);

値を読み取るときは、シリアル化を解除します。

unserialize($value_from_db);

JSON オブジェクトから値を取得するには、次の単純な関数を使用します。

function retrieve_value($object, $trail) {

    foreach ($trail as $name)
        if (isset($object->$name))
            $object = $object->$name;
        else
            throw new Exception("Object does not have the property $name");

    return $object;
}

したがって、次のようなものがあります。

$value = retrieve_value(json_decode($json), unserialize($db_value));

eval()悪なので使わないでください。

于 2013-03-08T04:44:30.830 に答える
0

これを行う汚い方法は、json のエンコードとデコードです。

$array = array([Your array]);
$obj = json_decode(json_encode($array));

ただし、コードをテストしていません。

于 2013-03-08T04:32:39.717 に答える
0

データベース内にパスを保存してから、オブジェクトのパスで「eval()」を使用できると思います。サニタイズされていないコードでは eval が危険であるため、誰もパスを変更できないことを確認してください!

eval("\$value = \$result->{$pathvar};");

私はそれをテストしませんでしたが、そのようなものです。もちろん、 $pathvar は、格納されている変数に関係なく、データベースからのパスの値になります。

于 2013-03-08T04:35:43.477 に答える