2010-05-21 3 views
5

У меня есть вложенный массив (только один уровень), как это:Как я могу «сдвоить» развязать вложенный массив?

$a = array(
    array(1, 2, 3), 
    array(2, 4, 6), 
    array(5, 10, 15) 
); 

И я хотел бы хороший способ обрушится() именно к этой форме:

1,2,3|2,4,6|5,10,15 

Я могу запустить a loop to implode(',',...) каждый массив в $a (сохраняя эти строки во временной области), а затем implode('|',...) этот временный массив, но похоже, что я должен сделать это более кратко * с PHP.

Заранее спасибо,
Приветствия!

* Под "более сжато" Я имею в виду, без написания цикла (так, только с помощью вызовов функций)

+0

Есть ли причина, по которой вы хотите эту обычную сплюснутую структуру? Поскольку JSON и сериализованный PHP позволяют превратить сложную структуру данных в синтаксическую строку. –

+0

Я создаю URI для API графиков Google. –

+0

Ах. Это хорошая причина! Вы посмотрели на gChartPhp? http://code.google.com/p/gchartphp/ –

ответ

8

Я опаздываю к игре здесь (по стандартам SO), но вы можете буквально «dual» implode.

implode('|', array_map('implode', array_fill(0, count($a), ','), $a)) 
+0

/Это то, о чем я говорю! –

+0

@salathe после этого impode я получаю данные этого типа ...... valueA (1), valueB (1) | valueA (2), valueB (2) и мне нужно сохранить значение A (1), значение A (2) в одной колонке и значении B (1), значение B (2) во втором столбце это возможно –

+0

моя проблема решена –

6

function implodeComas($arr) 
{ 
    return implode(',',$arr); 
} 
$out = implode('|', array_map('implodeComas', $a)); 

echo $out; 

Лучше один:

function myImplode($ret,$current) 
{ 
    if($ret) 
     $ret .= '|'; 

    return $ret .= implode(',',$current); 
} 

echo array_reduce($a, 'myImplode'); 
+0

+1 отличный способ сделать это :) – 2010-05-21 13:41:23

+0

Отличная идея. Единственное предостережение состоит в том, что он выглядит как array_reduce(), который разбивает элементы из задней части массива (реверсирование подмассивов на выходе). –

5

Здесь является действительно грязным способом:

str_replace('],[', '|', trim(json_encode($a), '[]')); 
+0

Грязный? Да. Но мне это очень нравится. Хотел бы я принять несколько ответов. –

+0

Это идеальное решение для одной линии отладки! Только то, что доктор прописал. – Supamic

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