从PHP对象中提取值

时间:2011-05-04 10:41:04

标签: php api

我一直在尝试为网站开发PHP API。我已经按照互联网上的教程进行了正常工作。

它使用以下网址结构:
http://localhost/mobileapi/search/dostuff/parameter1/parameter2/parameter3/parameter4/json={"name":"jumbo","age":"178","sex":"male"}

Command Object
(
    [Name] => search
    [Function] => dostuff
    [Parameters] => Array
        (
            [0] => parameter1
            [1] => parameter2
            [2] => parameter3
            [3] => parameter4
            [4] => json={"name":"jumbo","age":"178","sex":"male"}
        )

)

我需要做的是访问这些参数值,我首先尝试的那个可能是更难的一个是json。

到目前为止我所拥有的是:

    $params[] = $this->Command->getParameters();
    $json = urldecode($params[0][4]);
    $json = str_replace('json=', '', $json);
    $json = json_decode($json);

向我提供:

stdClass Object
(
    [name] => jumbo
    [age] => 78
    [sex] => male
)

最终还是一个对象。

我的最终目标是能够接收到API的JSON数据,然后将其插入数据库。我不能为我的生活找到如何获取这些最后的对象值并将它们存储在变量等中。

谢谢:)

4 个答案:

答案 0 :(得分:4)

非常简单 - 你可以像这样访问这些属性:

$params[] = $this->Command->getParameters();
$json = urldecode($params[0][4]);
$json = str_replace('json=', '', $json);
$json = json_decode($json);

$name = $json->name;
$age = $json->age;
$sex = $json->sex;

这是你想要找到的吗?

即使Command参数也可以这样访问:

$params = $this->Command->parameters;

这是通过对象关系符号“->”完成的,它与Java或.NET中的“.”类似,它类似于object->propertyparent->child

答案 1 :(得分:0)

添加:

if ($json instanceof stdClass) {
    $json = (array)$json;
}

答案 2 :(得分:0)

$json = '{"name":"jumbo","age":"178","sex":"male"}';
$json = (array) json_decode($json);
echo '<pre>';
print_r($json);
echo '</pre>';

答案 3 :(得分:0)

我并不完全理解您的需求,但请查看此代码是否对您有所帮助。我现在写了。它将从对象构建MySQL查询:

   $a = array();
   foreach((array)$json as $key=>$value)
       $a[] = "$key='$value'";
   mysql_query("INSERT INTO sometable SET ".implode(',' $a));

不要忘记在真实代码中为SQL参数添加一个sanitize调用!!

顺便说一句,如果你想让json_decode返回一个数组,你可以添加true作为第二个参数:

   $json_array = json_decode($obj, true);