2016-03-11 25 views
1

我有我使用遞歸構建我的PHP陣列那麼下面的方法把它們變成一個JSON字符串:陣列,而不是從json_encode對象用遞推法

protected function stringKeyToMultArray(&$newarr, $keys, $value) { 
    if(count($keys) > 1) { 
     $key = array_shift($keys); 

     if(!isset($newarr[$key]) || !is_array($newarr[$key])) { 
      $newarr[$key] = array(); 
     } 

     $this->stringKeyToMultArray($newarr[$key], $keys, $value); 
    } else { 
     $newarr[array_shift($keys)] = $value; 
    } 
} 

編輯:這是它是如何調用:

$path_arr = []; 
foreach ($product_row['fields'] as $field) { 
    //gets the path for this field like pathto/field 
    $strpath = $tags[$field['id']]['str_path']; 
    $paths = explode('/', $strpath); 
    $this->stringKeyToMultArray($path_arr, $paths, $field['value']); 
} 

再經過這根本json_encode它像json_encode($ path_arr) 編輯完 的問題是格式,如果它得到一個第二級應該使用數組來包裝部分。所以我現在所得到的是:

{ 
    "product_title":"Test Title", 
    "ASIN":"1234567890", 
    "codes":{ 
     "type":"UPC", 
     "number":"030878249270" 
    }, 
    "quantity":"1" 
} 

我需要的是以下幾點:

{ 
    "product_title":"Test Title", 
    "ASIN":"1234567890", 
    "codes":[ 
     { 
     "type":"UPC", 
     "number":"030878249270" 
     } 
    ], 
    "quantity":"1" 
} 

我如何能做到這一點與遞歸方法的任何想法?

+2

你有樣本輸入是正確編碼? –

+0

json_encode會給你一個對象..如果你想要一個數組/關聯數組,請使用json_decode。這就是說,我甚至沒有看到json_encode在這裏被使用。 – Lansana

+0

「如果它達到第二級應該使用對象來包裝零件」 - 但是在「我需要的是以下內容」之後顯示的是「_an array_中包裝的對象」。 – VolkerK

回答

2

鑑於該問題的規定的(非常)的具體條件和評論:

protected function stringKeyToMultArray(&$newarr, $keys, $value) { 
    if (count($keys) > 1) { 
     $key = array_shift($keys); 
     if (!isset($newarr[$key]) || !is_array($newarr[$key])) { 
      $newarr[$key] = array(array()); 
     } 
     $this->stringKeyToMultArray($newarr[$key][0], $keys, $value); 

    } else { 
     $newarr[array_shift($keys)] = $value; 
    } 
} 

看到https://3v4l.org/4Hpek

+0

鑑於答案的真棒......這完美地工作。 – sudopratt

相關問題