2016-04-04 11 views
0

フィールドのパラメータを多次元配列に変換するPHPのネストされたリクエスト構文をPHPで複製しようとしています。線に沿って何かにつながるFacebook Graph 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のforループが好きですか?よく分からない – 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);