2012-01-13 2 views
-2

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

Я пробовал разные для циклов и вещей типа 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', 
    ), 
    ) 
+1

Вы должны также попытаться просмотреть эти данные: 'Schloss Schönbrunn' на эту информацию:' Schloss Schönbrunn'. – deceze

+0

Это будет выход JSON в любом случае вместо PHP, при расшифровке он покажет «Schönbrunn». –

ответ

1
foreach ($outerArray as $key => &$value) { 
    $coords = explode(',', $value['coordinates']); 
    $value['coordinates'] = array(); 
    foreach ($coords as $coordPair) { 
     $value['coordinates'][] = explode(':', $coordPair); 
    } 
} 
+0

Это сработало отлично, мне просто пришлось переключать линии 2 и 3. Можете ли вы рассказать мне, что означает «&»? Или дайте мне ключевое слово, на которое я могу пойти. Благодаря! –

+0

Ой, вы правы насчет переключателя. Символ & сообщает PHP передать ссылку на элемент в массиве, чтобы при обновлении его в строках 3 и 5 он перенесет это обновление обратно в исходный массив. Google «проходит по ссылке». – davidethell

+0

О, боже, вот где я провалился. Я попытался сохранить его в переменной temp и заново создать массив с помощью массива array_push. Большое спасибо! –

3

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

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

See it in action.

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

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

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

0

Я предполагаю, что вы используете mysql, но, к сожалению, mysql не имеет понятия массивов. Возможно, вы можете использовать postgres, потому что я считаю, что он может работать с массивами. Но, похоже, этот вопрос является дубликатом: How to SQL Select a one to many relation and merge the output.

Смежные вопросы