2017-06-06 81 views
0

從mysql中,我有一個數據BLOB數據類型,它有兩種不同的方案(請參見下文)。我試圖把它們放入一個字符串中。下面是我在做的過程:不同數據長度的php JSON_DECODE

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

我遇到的問題是,因爲數據可能有兩個不同的情況,如「1.Query」中所示,我無法預測或概括它,並得到像「試圖獲得非對象的財產「。

我該如何解決這個問題?

+2

你引用的數組,如果它是一個對象。使用'$'['Spaces']'和'$ row ['Name']' – RiggsFolly

+0

使用'isset('Spaces')'來預測它們是**第二種情況** –

+0

或者從''json_decode()'並將數據保留爲對象 – RiggsFolly

回答

1

既然你傳遞trueto 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循環更適合這種事情。

+0

或者只是從'json_decode() '並將數據保留爲對象 – RiggsFolly

+0

@RiggsFolly當然,您可以刪除該數據,但仍需要進行isset檢查以確定您處於哪種情況,這是真正的問題。就個人而言,我更喜歡關聯數組; 'stdClass'很奇怪。 – IMSoP

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

+0

嘗試添加一些格式和說明文字到您的答案! – Zimano