Палец вверх -2
Перевод
Перевод

PHP: Как манипулировать этим массивом как можно более интенсивным ЦП

Я работаю над 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',
      ),
    )
php arrays loops
задан Drazen Mokic 13 янв. 2012 г., 6:30:35
источник

3 ответа

Решение 1
Перевод
Перевод
foreach ($outerArray as $key => &$value) {
    $coords = explode(',', $value['coordinates']);
    $value['coordinates'] = array();
    foreach ($coords as $coordPair) {
        $value['coordinates'][] = explode(':', $coordPair);
    }
}
ответ дан davidethell 13 янв. 2012 г., 6:38:47
источник
Палец вверх 3
Перевод
Перевод

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

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

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

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

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

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

ответ дан Jon 13 янв. 2012 г., 6:34:42
источник
Палец вверх 0
Перевод
Перевод

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

ответ дан Bytemain 13 янв. 2012 г., 6:41:34
источник