PHP: конкатенация элементов многомерного массива

Я хочу объединить один элемент многомерного массива с некоторыми строками.

<? $string1 = 'dog'; $string2 = array ( 'farm' => array('big'=>'cow', 'small'=>'duck'), 'jungle' => array('big'=>'bear', 'small'=>'fox') ); $string3 = 'cat'; $type = 'farm'; $size = 'big'; $string = "$string1 $string2[$type][$size] $string3"; echo($string); ?> 

Используя этот синтаксис для $ string, я получаю:

собака Array [большая] кошка

Я бы не хотел использовать альтернативный синтаксис

 $string = $string1 . ' ' . $string2[$type][$size] . ' ' . $string3; 

который работает.

Что случилось с "$ string1 $ string2 [$ type] [$ size] $ string3"?

Используйте «сложный синтаксис»:

 $string = "$string1 {$string2[$type][$size]} $string3"; 

Разбор переменных PHP довольно прост. Он будет распознавать доступ к массиву одного уровня, но не более уровня. Включив выражение в {} вы явно указываете, какая часть строки является переменной.

См. PHP – Variable parsing .

Я не поклонник сложного синтаксиса или разбора переменных в строках. Обычно я использую синтаксис «alternate», который вы описали. Вы тоже можете это сделать:

 $string = implode(' ', array($string1, $string2[$type][$size], $string3)); 

Использовать это:

 $string = "$string1 {$string2[$type][$size]} $string3";