2014-03-25 258 views
1

我有一個字符串形式爲「IT/Internet/Web Development/Ajax」。我試圖創建一個PHP函數,分析它,並創建一個JSON對象像創建一個JSON對象

[{ 
    "name": "IT", 
    "subcategories":[ 
    { 
    "name": "Internet", 
     "subcategories" : [ 
     { 
     "name": "Web Development", 
     "subcategories" : [ 
     { 
     "name":"Ajax" 
      }]}]}] 

我有寫一個函數問題,做到這一點。這是我迄今爲止。

$category = "IT /Internet /Web Development"; 
$categoryarray = split("\/", $category); 
$categoryLength = count($categoryarray); 
$subcategory_collection = array(); 

$lastCategory = array("name"=>$categoryarray[$categoryLength-1]); 
array_push($subcategory_collection, $lastCategory); 

for($i=$categoryLength-2; $i>=0; $i--) { 
    $subcategory = array("name" => $categoryarray[$i], "subcategories" => $subcategory_collection); 
    array_push($subcategory_collection, $subcategory); 
} 

這不會產生所需的輸出。我希望該函數能夠解析任何以「父/子/孫/孫子孫」形式出現的字符串,並將其轉換爲JSON對象。如果有人能指導我在正確的方向,那將不勝感激

+0

可能重複[創建JSON對象的正確方法(http://stackoverflow.com/questions/3281354/create-json-object-the-correct-way) –

回答

1

也許這是正確的做法。我從最深的項目開始,爲每個項目添加一個父項。我認爲這很容易,但我不知道爲什麼。沒有嘗試過另一個。 ;)

<?php 
$input = "IT/Internet/Web Development"; 
$items = explode("/", $input); 

$parent = new StdClass(); 
while (count($items)) 
{ 
    $item = array_pop($items); 
    $object = $parent; 
    $object->name = $item; 
    $parent = new StdClass(); 
    $parent->name = ''; 
    $parent->subcategories = array($object); 
} 

echo json_encode(array($object)); 

感謝您的接受!同時,我嘗試了另一種方式。我認爲循環本身很容易,但是你需要記住根對象,這樣就增加了一些額外的代碼。最後沒有什麼太大的區別,但我認爲我對改變秩序的直覺是正確的。的

<?php 
$input = "IT/Internet/Web Development"; 
$items = explode("/", $input); 

$parent = null; 
$firstObject = null; 
while (count($items)) 
{ 
    $object = new StdClass(); 
    $item = array_shift($items); 
    $object->name = $item; 
    if ($parent) 
    $parent->subcategories = array($object); 
    else 
    $firstObject = $object; 

    $parent = $object; 
} 

echo json_encode(array($firstObject)); 
+0

謝謝你的幫助Golez 。這非常有幫助 – aafonso1991

+0

是的,我更喜歡第一種方法,只是因爲它更乾淨,但他們都完成了工作。再次非常感謝你Golez – aafonso1991

+0

我實際上最終與第二個一起去了,因爲我需要跟蹤搜索原因的根 – aafonso1991