2015-12-23 45 views
-4

explode之外還有什麼方法可以將一個看起來像:"[2,0,[]]"的php字符串轉換爲數組嗎?將一個php字符串轉換爲一個「JSONish」格式的數組php

我的陣列輸出應該是這樣的:

array(2,0,array()) 

而且"[2,0,[1,2,3,4]]"這刺痛應該是:

array(2,0,array(1,2,3,4)) 

我不想用explode,因爲它只是似乎想多的代碼了很簡單的任務。在JavaScript它是一個內襯:

JSON.parse('[2,0,[1,2,3,4]]'); 
+0

結果應該是怎樣的? – Naruto

+0

您的預期產出是多少? –

+0

爆炸有什麼問題?如果在其他地方使用要爆炸的字符,則可以使用正則表達式。 –

回答

8

您的輸入看起來像一個JSON字符串,可與json_decode()功能轉換:

json_decode("[2,0,[]]", true); 

/* 
Array (
    0 => 2, 
    1 => 0, 
    2 => 
    Array (
    ), 
) 
*/ 
+0

謝謝。我不認爲這會工作,因爲它不是有效的json。 –

+1

我應該知道這將工作,因爲我在JavaScript中做到了這一點。 –

+3

它*是*有效JSON @AryehArmon測試在http://jsonlint.com/看到。 –

0

正如塔裏克·馬哈茂德指定json_decode的工作,但如果你希望從頭做到這一點:

<?php 
$string = "[2,0,[1,2,3,4,]]"; 

$i = 0; 
$array = array(); 
$handlerCount = 0; 
$arrayTmp = array(); 
$countArr2=0; 
while(isset($string[$i])){ 
     switch($string[$i]){ 
       case ",": 
         break; 
       case "[": 
         $handlerCount++; 
         break; 
       case "]": 
         $handlerCount--; 
         break; 
       default: 
         if($handlerCount == 1){ 
           $array[$i] = (int)$string[$i]; 
         }else{ 
           $arrayTmp[$countArr2] = (int)$string[$i]; 
           $countArr2++; 
         } 

     } 
     $i++; 
} 
array_push($array,$arrayTmp); 

var_dump($array); 
?> 

[概念驗證]

array(3) { 
    [1]=> 
    int(2) 
    [3]=> 
    int(0) 
    [4]=> 
    array(4) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    [3]=> 
    int(4) 
    } 
} 
相關問題