PHP: Как манипулировать этим массивом как можно более интенсивным ЦП - PullRequest
0 голосов
/ 13 января 2012

Я работаю над API для внутреннего использования, и мой запрос SQL возвращает мне результаты в виде массива. Теперь мне нужна определенная часть (координаты), отформатированная должным образом, но я не получаю ее.

Я пробовал разные циклы и такие вещи, как array_splice, но я всегда оказывался почти там. Другое дело, я буду запускать это на всех результатах, поэтому мне нужно решение, которое работает хорошо. Посмотрите на примеры, я благодарен за любую помощь.

Мне нужно получить из этого массива:

array (
  0 => array (
    'id' => '3',
    'name' => 'Stadthalle',
    'description' => 'Die Wiener Stadthalle',
    'created_at' => '2012-01-07 14:22:06',
    'coordinates' => '48.201187:16.334213, 48.200665:16.331606, 48.202989:16.331091, 48.203075:16.334192',
    'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
  ),
  1 => array (
    'id' => '4',
    'name' => 'Schloss Schönbrunn',
    'description' => 'Schloss Schönbrunn, die ehemalige Sommerresidenz der Kaiserfamilie, zählt zu den schönsten Barockanlagen Europas.',
    'created_at' => '2012-01-10 01:06:48',
    'coordinates' => '48.201187:16.334213, 48.200665:16.331606, 48.202989:16.331091, 48.203075:16.334192',
    'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
  ),
)

К этому массиву:

 array (
      0 => array (
        'id' => '3',
        'name' => 'Stadthalle',
        'description' => 'Die Wiener Stadthalle',
        'created_at' => '2012-01-07 14:22:06',
        'coordinates' => array(
            array('48.201187:16.334213'),
            array('48.200665:16.331606'),
            array('48.202989:16.331091'),
            array('48.203075:16.334192')
        ),
        'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
      ),
      1 => array (
        'id' => '4',
        'name' => 'Schloss Schönbrunn',
        'description' => 'Schloss Schönbrunn, die ehemalige Sommerresidenz der Kaiserfamilie, zählt zu den schönsten Barockanlagen Europas.',
        'created_at' => '2012-01-10 01:06:48',
        'coordinates' => array(
            array('48.201187:16.334213'),
            array('48.200665:16.331606'),
            array('48.202989:16.331091'),
            array('48.203075:16.334192')
        ),
        'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
      ),
    )

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Выглядит достаточно просто:

foreach($array as &$item) {
    $item['coordinates'] = explode(', ', $item['coordinates']);
}

Посмотрите это в действии .

На самом деле это не совсем то, что вы показываете, ноВы можете изменить его на

$item['coordinates'] = array_map(function($el) { return array($el); },
                                 explode(', ', $item['coordinates']));

, если это действительно то, что вы хотите.

1 голос
/ 13 января 2012
foreach ($outerArray as $key => &$value) {
    $coords = explode(',', $value['coordinates']);
    $value['coordinates'] = array();
    foreach ($coords as $coordPair) {
        $value['coordinates'][] = explode(':', $coordPair);
    }
}
0 голосов
/ 13 января 2012

Полагаю, вы используете mysql, но, к сожалению, у mysql нет концепции массивов.Может быть, вы можете использовать postgres, потому что я считаю, что он может работать с массивами.Но кажется, что этот вопрос является дубликатом: Как SQL Выберите отношение один ко многим и объедините вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...