2011-07-08 3 views
1

に基づいてPHPアレイ1のレベルを平らにし、私は現在、次のように出力されます配列を持っている:私がする必要がどのようながキー

Array 
(
    [events_response] => Array 
    (
     [total_events] => 3 
     [0] => Array 
     (
      [events_list] => Array 
      (
       [0] => Array 
       (
        [event] => Array 
        (
         [id] => 41 
         [ages] => All 
         [buy_link] => 
         [created] => 2011-06-06 22:13:02 
         [date] => 2012-06-06 07:00 pm 
         [description] => 
         [price] => 0.00 
         [0] => Array 
         (
          [location] => Array 
          (
           [id] => 7 
           [name] => Metrodome 
           [website] => 
           [0] => Array 
           (
            [address] => Array 
            (
             [street_address] => 123 Any Street 
             [city] => My City 
             [state_province] => 
             [postal_code] => 12345 
             [country] => 
            ) 
           ) 
          ) 
         ) 
         [1] => Array 
         (
          [collaborators_list] => Array 
          (
           [0] => Array 
           (
            [collaborator] => Array 
            (
             [id] => 3 
             [name] => derp 
             [website] => http://derp.com/ 
            ) 
           ) 
           [1] => Array 
           (
            [collaborator] => Array 
            (
             [id] => 4 
             [name] => "Foo" Bar 
             [website] => http://www.foobar.com/ 
            ) 
           ) 
          ) 
         ) 
         [2] => Array 
         (
          [account] => Array 
          (
           [id] => 1 
           [account_name] => Brand New 
          ) 
         ) 
        ) 
       ) 
       [1] => Array 
       (
        [event] => Array 
        (
         [id] => 64 
         [ages] => 21+ 
         [buy_link] => dsfdsaf 
         [created] => 2011-07-05 21:35:52 
         [date] => 2012-06-06 07:00 pm 
         [description] => 
         [price] => 0.00 
         [0] => Array 
         (
          [location] => Array 
          (
           [id] => 8 
           [name] => name 
           [website] => website.com 
           [0] => Array 
           (
            [address] => Array 
            (
             [street_address] => street address 
             [city] => city 
             [state_province] => WI 
             [postal_code] => 53103 
             [country] => USA 
            ) 
           ) 
          ) 
         ) 
         [collaborators_list] => 
         [1] => Array 
         (
          [account] => Array 
          (
           [id] => 1 
           [account_name] => Brand New 
          ) 
         ) 
        ) 
       ) 
       [2] => Array 
       (
        [event] => Array 
        (
         [id] => 65 
         [ages] => 21+ 
         [buy_link] => dsfdsaf 
         [created] => 2011-07-05 21:36:12 
         [date] => 2012-06-06 07:00 pm 
         [description] => 
         [price] => 0.00 
         [0] => Array 
         (
          [location] => Array 
          (
           [id] => 8 
           [name] => name 
           [website] => website.com 
           [0] => Array 
           (
            [address] => Array 
            (
             [street_address] => street address 
             [city] => city 
             [state_province] => WI 
             [postal_code] => 53103 
             [country] => USA 
            ) 
           ) 
          ) 
         ) 
         [collaborators_list] => 
         [1] => Array 
         (
          [account] => Array 
          (
           [id] => 1 
           [account_name] => Brand New 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
) 

は基本的にはintでキーがあるレベルを削除しています。したがって、例えば[total_events][events_list]と同じレベルにあり、その間には[0]がありません。 [<int>]キーがある他の領域についても同様です。

私はPHPを使用していますが、それを平坦化するためにさまざまな試みを試みましたが、そこにはかなり到達できませんでした。

ありがとうございます!

答えて

-1
function flattenByRemoveingIntKeys($array) 
{ 
    foreach ($array as $key => $val) 
    { 
     if (is_array($val)) 
      $array[$key] = flattenByRemoveingIntKeys($val); 
     else if (is_numeric($key)) 
     { 
      $array .= $val[$key]; 
      unset($array[$key]); 
     } 
    } 
} 

実際にはテストされていませんが、そのようなものはうまくいくはずです。

+0

はこれを試してみたとのすべての配列を変更していないようでした。それでもちょっと厄介です... – joshholat

+0

unset($ array [$ key])の "致命的なエラー:文字列のオフセットを解除できません" – joshholat

+0

私が言ったように、テストされていませんが、そのアイデアはそこにあります。再帰関数を使用する場合は、これを少し簡単に行うことができます。 –

0

これを試してみてください:

function RemoverIntKeys($array) { 
    foreach($array as $key => $value) { 
     if(preg_match("/^\d+$/",$key)) { 
     unset($array[$key]); 
     } 
    } 
      return $array; 
} 

$array = array("foo" => "baa", 2 => "hehe", "test" => "..", 4 => "hello"); 
$newarray = RemoverIntKeys($array); 
echo "<pre>"; 
print_r($newarray); 

出力:

Array 
    (
     [foo] => baa 
     [test] => .. 
    ) 
+1

これは簡単ではないので、データを番号の付いたキーの下に保存したいと考えています。したがって、そのデータを番号の付いたキーの下に置き、レベルの上に移動する必要があります。 –