2015-08-06 5 views
0

По существу у меня есть массив:Создать строковую переменную, чтобы держать первое слово каждого элемента массива

$names = array("firstName1 lastName1", "firstName2 lastName2", "firstName3 lastName3"); 

Я хочу создать строковую переменную для хранения FIRSTNAME1, FIRSTNAME2 и firstName3. В идеале строка должна выглядеть следующим образом:

$firstNames = "firstName1, firstName2 & firstName3"; 

Так что я могу создать сценарий, который выглядит как:

echo 'Thank you for your booking for'.$firstNames.' Your booking is now complete.' 

Я пытался смотреть на конкатенации с помощью взрывается с «для» петли, но Бесполезный Это не так. Массив не является фиксированной длиной, поэтому мне нужен последний элемент, который нужно добавить с помощью «&».

Спасибо за любую помощь.

EDIT:

Используя версию 5.5.12, у меня есть вход:

$names = array("firstName1 lastName1", "firstName2 lastName2", "firstName3 lastName3"); 
$firstNames = ''; 
$finalFirstName = array_pop($names); 
foreach ($names as $name) 
{ 
    $firstNames = $firstNames . ' ' . reset(explode(' ', $name)); 
} 
$firstNames = ' & ' . explode(' ', $finalFirstName)[0]; 
echo $firstNames; 

И мой вывод:

Strict standards: Only variables should be passed by reference on line 8. 

Но я вижу текст:

& firstName3 
+0

'$ firstNames = Implode ('', array_column (array_map (функция ($ значение) {возвращение взрываются (»», $ значение);}, $ имена), 0));' вероятно, хороший старт. –

+0

Вы также должны устранить первый «сброс» –

+0

. Так что он читает: '$ firstNames = $ firstNames. ''. explode ('', $ name); '? Это показывает ошибку 'Notice: Array to string conversion on line 8' – dantan04

ответ

1

Я бы использовал foreach а не для циклов для массивов с неизвестной длиной.

$firstNames = ''; 
foreach ($names as $name) 
{ 
    $firstNames = $firstNames . ' ' . reset(explode(' ', $name)); 
} 

Чтобы поставить & перед последним именем, я бы палить фамилию и добавляет его так, как вам нужно, чтобы это было, превращая код в.

$firstNames = ''; 
$finalFirstName = array_pop($names); 
foreach ($names as $name) 
{ 
    $firstNames = $firstNames . ' ' . reset(explode(' ', $name)); 
} 
$firstNames = ' & ' . reset(explode(' ', $finalFirstName)); 
+0

'explode (...)' возвращает массив. Измените его на 'reset (explode (...))' и он должен работать. –

+0

Вы правы, и мне было интересно, почему нижняя часть. – Goose

+0

Ну, я дал вам +1, Не уверен, что downvoter заметил то же самое, что и я. –

1
$tmp = array_map(
     function ($value) { return explode(' ', $value)[0]; }, 
     $names); 
$firstNames = implode(', ', array_slice($tmp,0,count($tmp)-1)) . 
       " & " . end($tmp); 

// firstName1, firstName2 & firstName3 
+0

Это не должно быть актуально в 2015 году, но важно знать, что этот код предназначен для PHP 5.4+ –

+0

BTW, отличное функциональное решение :) –

+0

@HenriqueBarcelos для использования в 2014 году или ealier, только одно место должно быть изменено :) – splash58

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