#php
Пока вы все тут, продолжение темы: преобразовать массив в переменную.
Народ, а есть ли расширенный вариант функции implode для ассоциативных массивов?
Например:
$cars = array('van'=>'volvo xc70','coupe'=>'mercedes clk gtr','suv'=>'nissan pathfinder');
$glue1 = '
';
$glue2 = ' - ';
extended_implode($glue1,$glue2,$cars);
Вывод:
van - volvo xc70
coupe - mercedes clk gtr
suv - nissan pathfinder
N.B.:
Если штатной функции нет, лично мне алгоритм не нужен. =) Так что в этом случае вопрос
меняется на "какие ошибки в моем способе".
function mb_extended_implode($glue1,$glue2,$elements,$enc='utf-8'){
$out = '';
foreach($elements as $key=>$value){
$out .= $key.$glue2.$value.$glue1;
}
$out = mb_substr($out,0,mb_strlen($glue2,$enc),$enc);
return $out;
}
Ответы
Ответ 1
$res = array_map(function($k, $v) { return "$k - $v"; }, array_keys($cars), $cars); echo implode('
', $res); Или вот так, в зависимости от того, нужен
на конце или нет: $res = array_map(function($k, $v) { return "$k - $v
"; }, array_keys($cars), $cars); echo implode('', $res);Ответ 2
http_build_query А вот это не подойдет ?Ответ 3
Вот что можно найти на сайте php.net : Here is a function to implode and array including the key and value pair. $val ) { if ( is_array( $val ) ) $val = implode( ',', $val ); $string[] = "{$key}{$glue}{$val}"; } return implode( $separator, $string ); } ?> You can, for example, encode an array to be sent as an URL query using this: Or if you want to output an HTML element attributes: '; ?> Hope it can help someone!Ответ 4
Версия хорошая, но не полноценная. Достаточно добавить рекурсию, и тогда полноценно многомерный массив будет парситься. $val = array_implode( $glue, $separator, $val ); Вот так выглядит вся функция. Тут мы будем иметь и ключи и значения. function array_implode( $glue, $separator, $array ) { if ( ! is_array( $array ) ) return $array; $string = array(); foreach ( $array as $key => $val ) { if ( is_array( $val ) ) $val = array_implode( $glue, $separator, $val ); $string[] = "{$key}{$glue}{$val}"; } return implode( $separator, $string ); }
Комментариев нет:
Отправить комментарий