2016-01-27 64 views
0

我試圖將一個PHP多維數組轉換爲一個javascript數組由於服務器的版本沒有使用json編碼器。PHP維度數組到Javascript數組沒有JSON

爲例多維數組的:

Array (
    [0] => Array (
      [0] => 18 
      [1] => Région Grand EST 
      [2] => GE) 
    [1] => Array (
      [0] => 17 
      [1] => Région Grand OUEST/NORD 
      [2] => GO N) 
    [2] => Array (
      [0] => 25 
      [1] => Région Grand OUEST/SUD 
      [2] => GO S) 
) 

目前爲沒有多維數組我使用這個功能:

function js_str($s) { 
    return '"' . addcslashes($s, "\0..\37\"\\") . '"'; 
} 

function js_array($array) { 
    if (is_array($array)) { 
     $temp = array_map('js_str', $array); 
     return '[' . implode(',', $temp) . ']'; 
    } 
    return '[-1]'; 
} 

但我不能用它來多維,我m試圖做類似遞歸的事情來做任何大小的數組。

要得到這樣的結果:

myArray = [[18, 'Région Grand EST', 'GE'],[17, 'Grand OUEST/NORD', 'GO N'], [25, 'Région Grand OUEST/SUD', 'GO S']]; 

這真的很難找到一個答案,而不json_encode,感謝您的幫助。 (是的,我在深化發展史前服務器)

+2

爲什麼不是外部庫創建JSON? https://packagist.org/search/?q=JSON –

+0

「因爲服務器版本」是使用JSON的一個相當薄弱的原因。對於幾乎任何提供JSON編碼器的PHP版本,都需要*外部庫。你基本上正在自我改造一個糟糕的過程。 – deceze

回答

0

我會解決這個問題有一個遞歸函數是這樣的:

function js_array($array) { 
    if (is_array($array)) { 
     $temp = array(); 
     $output = '['; 
     foreach ($array AS $key=>$value) { 
      $temp[] .= "'$key':" . js_array($value); 
     } 
     $output .= implode(',', $temp); 
     $output .= "]"; 
    } else { 
     $output .= "'$array'"; 
    } 
    return $output; 
} 

我們在這裏所做的評估陣列中的每個元素,看看如果它也是一個數組。直到我們留下簡單的鍵:值對爲止,每個級別都會向下鑽取。

如果需要,您可以編輯特殊字符或刪除數組鍵。

+0

Thx給你! (數組不工作的關鍵,所以我創建對象,如果我需要一個「{}」,它似乎你有一個錯誤<< $輸出。=「'數組''; >>它的$輸出=」'$陣列'「;) – Azash

0

Thx to Danielml01的幫助。 這裏使用的解決方案:

function js_array($array) { 
    if (is_array($array)) { 
     $temp = array(); 
     $isObject = false; 
     foreach ($array AS $key=>$value) { 
      if (is_numeric($key)) 
       $temp[] .= js_array($value); 
      else { 
       $isObject = true; 
       $temp[] .= "'$key':" . js_array($value).""; 
      } 
     } 
     if ($isObject) 
      $output = "{".implode(',', $temp)."}"; 
     else 
      $output = "[".implode(',', $temp)."]"; 
    } 
    else 
     $output = "'".$array."'"; 
    return $output; 
}