2016-04-04 104 views
0

我想在PHP中複製Facebook的嵌套請求語法,將字段參數轉換爲多維數組。Facebook圖形API向陣列嵌套的請求語法

/me?fields=name,updated_time,photos{name,source},likes{name,link},events.limit(4){name,start_time,end_time,photos} 

將導致沿線的東西...

Array 
(
    [name] 
    [updated_time] 
    [photos] => Array 
     (
      [name] 
      [source] 
     ) 
    [likes] => Array 
     (
      [name] 
      [link] 
     ) 
) 
+0

您在哪裏堅持這樣做? – Rizier123

+0

最好是在PHP循環?不明白你的意思 – Garrett

回答

0

想出如何匹配圖形API使用循環。確定最好保留過濾器,並將限制修飾符作爲對象的一部分,以便儘可能保持陣列儘可能乾淨

 $a = $input; 
    $output = array(); 
    $outputStacktrace = array(&$output); 
    $depth = 0; 
    $buffer = $key = ''; 
    $m = memory_get_usage(); 
    for ($i = 0; $i < strlen($a); $i++) 
       if ($a[$i] == ',') { 
      if (strlen($buffer)) 
          if($depth == 0){ 
           if(is_array($outputStacktrace[0]) && empty($outputStacktrace[0])){ 
            $outputStacktrace[$depth][$buffer] = array(); 
           } 
          } else { 
       $outputStacktrace[$depth][$key ? $key : count($outputStacktrace[$depth])] = $buffer; 
          } 
         $buffer = $key = ''; 
     } elseif ($a[$i] == '{') { 
      $outputStacktrace[$depth][$buffer] = array(); 
      $outputStacktrace[$depth + 1] = &$outputStacktrace[$depth][$buffer]; 
      $depth++; 
      $buffer = ''; 
     } elseif ($a[$i] == '}') { 
      if (strlen($buffer)) 
       $outputStacktrace[$depth][$key ? $key : count($outputStacktrace[$depth])] = $buffer; 
      $buffer = $key = ''; 
      unset($outputStacktrace[$depth]); 
      $depth--; 
     } else { 
      $buffer .= $a[$i]; 
       } 
       if($buffer!='') 
       $outputStacktrace[$depth][$key ? $key : count($outputStacktrace[$depth])] = $buffer; 

       return ($output);