Intereting Posts
Динамическое заполнение статической переменной в PHP Рекомендации по проектированию каркаса передача PHP-переменных через javascript windows.open на другую страницу PHP Есть ли сборка мусора в PHP? htaccess удалить .php и сохранить строку запроса Шифрование данных в Cocoa, декодирование в PHP (и наоборот) Получение необработанной строки запроса SQL из подготовленных операторов PDO Можно ли читать / получать доступ к значениям сканера штрих-кода, используя PHP и MySQL? Аутентификация веб-браузера с сертификатом SSL Альтернатива mb_convert_encoding с кодировкой HTML-ENTITIES Скрипт file_get_contents работает с некоторыми веб-сайтами, но не с другими Загрузка файла php-файла по коду Загрузка изображения Codeigniter будет загружаться только в один каталог PHP5: Как включить включенную функцию, всегда эхо, если я ее назову? Объединение нескольких результатов MySQL в один JSON-код (PHP)

Импланирование ассоциативного массива в PHP

Скажем, у меня есть массив:

$array = Array( 'foo' => 5, 'bar' => 12, 'baz' => 8 ); 

И я хотел бы напечатать строку текста в моем представлении следующим образом:

«Значения: foo (5), bar (12), baz (8)»

Что я могу сделать, так это:

 $list = Array(); foreach ($array as $key => $value) { $list[] = "$key ($value)"; } echo 'The values are: '.implode(', ',$list); 

Но я чувствую, что должен быть более простой способ, без необходимости создавать массив $list в качестве дополнительного шага. Я пробовал array_map и array_walk , но не array_walk .

Поэтому мой вопрос: какой лучший и самый короткий способ сделать это?

Solutions Collecting From Web of "Импланирование ассоциативного массива в PHP"

Проблема с array_map заключается в том, что функция обратного вызова не принимает ключ в качестве аргумента. Вы можете написать свою собственную функцию, чтобы заполнить пробел здесь:

 function array_map_assoc( $callback , $array ){ $r = array(); foreach ($array as $key=>$value) $r[$key] = $callback($key,$value); return $r; } 

Теперь вы можете сделать это:

 echo implode(',',array_map_assoc(function($k,$v){return "$k ($v)";},$array)); 

Есть способ, но он довольно многословный (и, возможно, менее эффективный):

 <?php $array = Array( 'foo' => 5, 'bar' => 12, 'baz' => 8 ); // pre-5.3: echo 'The values are: '. implode(', ', array_map( create_function('$k,$v', 'return "$k ($v)";'), array_keys($array), array_values($array) )); echo "\n"; // 5.3: echo 'The values are: '. implode(', ', array_map( function ($k, $v) { return "$k ($v)"; }, array_keys($array), array_values($array) )); ?> 

Ваш оригинальный код выглядит хорошо для меня.

Вы можете распечатывать значения при повторении:

 echo 'The values are: '; foreach ($array as $key => $value) { $result .= "$key ($value),"; } echo rtrim($result,','); 

Принимая помощь от ответа @linepogl, я редактировал код, чтобы сделать его более простым, и он отлично работает.

 function array_map_assoc($array){ $r = array(); foreach ($array as $key=>$value) $r[$key] = "$key ($value)"; return $r; } 

И тогда просто вызовите функцию, используя

 echo implode(' , ', array_map_assoc($array)); 

Я придумал

  foreach ($array as &$item) { $item = reset($item); } $array = implode(', ', $array); var_dump($array);