2013-06-11 3 views
1

У меня есть неудобная необходимость, но мне нужно чередоваться с массивом с другим массивом, прежде чем приступать к результату. Я предполагаю, что мой лучший вариант будет меньше говорить больше примерImplode массив с массивом

номер массива один

[0] => "John has a ", [1] => "and a", [2] => "!" 

номер массива два

[0] => 'Slingshot", [1] => "Potato" 

Мне нужно производить

John has a Slingshot and a Potato! 

Мой вопрос может Я делаю это с помощью implode, или я должен создать свою собственную функцию?

+0

Вы могли бы объединить массив, но тогда это было бы в неправильном порядке. Таким образом, для этого вам понадобится функция – xdbas

+0

[implode не принимает 2 массива в качестве аргумента только разделитель и массив, чтобы он не работал.] (Http://php.net/manual/en/function.implode.php) – Prix

+5

Вы уверены, что не хотите форматировать строки? 'echo vsprintf (« У Джона есть% s и% s! », массив (« рогатка »,« картофель »));' => «У Джона есть рогатка и картофель!» – benastan

ответ

1

Адаптировано из comment.

Вы уверены, что не хотите форматировать строки?

echo vsprintf("John has a %s and a %s!", array('slingshot', 'potato')); 

Выход:

John has a slingshot and a potato! 
3

Простое решение

$a = [0 => "John has a", 1 => "and a", 2 => "!" ]; 
$b = [0 => "Slingshot", 1 => "Potato"]; 
vsprintf(implode(" %s ", $a),$b); 

Использование array_map перед тем implode

$a = [0 => "John has a", 1 => "and a", 2 => "!" ]; 
$b = [0 => "Slingshot", 1 => "Potato"]; 

$data = []; 
foreach(array_map(null, $a, $b) as $part) { 
    $data = array_merge($data, $part); 
} 
echo implode(" ", $data); 

Другой пример:

$data = array_reduce(array_map(null, $a, $b), function($a,$b){ 
    return array_merge($a, $b); 
},array()); 

echo implode(" ", $data); 

И выведет

John has a Slingshot and a Potato ! 

Demos

Live DEMO 1

Live DEMO 2

+1

Я никогда не думал, что мы могли бы удалить ключевое слово 'array' и' new stdClass' ... –

+0

+ rep за это усилие, но я предпочитаю использовать один лайнер benastan (см. Комментарии): P –

+0

@php_nub_qq благодарит один лайнер только один тестовый случай ... – Baba

1

Может быть стоит посмотреть на верхний ответ на Interleaving multiple arrays into a single array который, кажется, несколько более общих (для п массивов, а не 2) версия о том, что в противном случае именно что вы после этого :-)

1
$a = [0 => "John has a ", 1 => "and a", 2 => "!" ]; 
$b = [0 => "Slingshot", 1 => "Potato"]; 

foreach($a AS $k=>$v){ 
    echo trim($v).' '.trim($b[$k]).' '; 
} 

Если вы фиксируете свои места, так что они соответствуют :)

Возможно, вы также захотите добавить проверку isset().

+1

'trim' было бы полезно здесь для пространства , –

+0

Добавлена ​​отделка, спасибо! – Jessica