Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Преобразовать массив в переменную с учетом ключей

#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 ); }

Комментариев нет:

Отправить комментарий