Свести массив PHP на один уровень на основе ключа - PullRequest
1 голос
/ 08 июля 2011

В настоящее время у меня есть массив, который выводит следующим образом:

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 и пробовал различные попытки его сгладить, но не смог добраться до него.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Попробуйте это:

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] => ..
    )
0 голосов
/ 08 июля 2011
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]);
        }
    }
}

Не проверено, но что-то подобное должно работать.

...