php JSON_DECODE用于不同的数据长度

时间:2017-06-06 08:22:57

标签: php

从mysql,我有一个数据BLOB数据类型,它有两种不同的场景(请参见下文)。我试图将它们放入一个字符串中。以下是我正在做的过程:

1。查询:

$names= $results[0]->name;
print_r($names);

第一种情况:

[{"Name":"Mike"},{"Name":"Sean"}]

第二种情况:

{"Name":"Mike Smith","Spaces":"1"}

2。 JSON_DECODE

$data =  json_decode(stripslashes($names),true);
print_r($data);

第一种情况:

    Array
        (
            [0] => Array
                (
                    [Name] => Mike
                )

            [1] => Array
                (
                    [Name] => Smith
                )
        )

第二种情况:

    Array
        (
            [Name] => Mike Smith
            [Spaces] => 1
        )

第3。我要做的是:将它们放入一个字符串

$string = '';

for ($i=0; $i <sizeof($data) ; $i++){ 
    $row = $data[$i];           
    $name = $row -> Name;           

    if(isset($row -> Spaces)){
        $number = '(' . $row -> Spaces . ')';

    }else{                  
        $number = '';

    };
    $string .=  $name . $number . ', ';

};

//Remove last comma
$refined = rtrim($string,', ');

print_r($refined);

4。 ISSUE

我遇到的问题是,因为数据可能有两种不同的情况,如&#34; 1.Query&#34;中所示,我无法预测或推广它并得到像#34这样的错误;试图获得非对象的属性&#34;。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

由于您正在传递true to the $assoc parameter of json_decode$row->Name 永远不会成为正确的语法,因为您有一个数组,并且这是访问对象的语法;你想要$row['Name']。 (顺便说一下,在->周围放置空间是不常见的。)

但是,你在这一行基本上有正确的想法:

if(isset($row -> Spaces)){

对于数组,而不是:

if(isset($row['Spaces'])){

你可以做同样的事情,看看你是否有名字或名单:

if(isset($row['Name'])) {
    // In scenario B
    echo $row['Name'];
    // check for 'Spaces' etc
} else {
    // In scenario A
    foreach ( $row as $item ) {
        echo $item['Name'];
    }
}

请注意我在这里使用a foreach loop,这比你的for循环更适合这类事情。

答案 1 :(得分:1)

我会编辑我的答案以便更好地理解

$str1 = '[{"Name":"Mike"},{"Name":"Sean"}]';
$str2 = '{"Name":"Mike Smith","Spaces":"1"}';

$json1 = json_decode($str1, false);
$json2 = json_decode($str2, false);

if(is_object($json1))
    { echo 'json1 is object<br>'; } else
    { echo 'json1 is NOT object<br>'; }

if(is_object($json2))
    { echo 'json2 is object'; } else
    { echo 'json2 is NOT object'; }

http://php.net/manual/en/function.is-object.php