Самый быстрый способ взорвать ассоциативный массив с помощью ключей

Я ищу быстрый способ превратить ассоциативный массив в строку. Типичная структура будет похожа на строку запроса URL-адреса, но с настраиваемыми разделителями, поэтому я могу использовать ' & 'для ссылок xhtml или' & 'иначе.

Моя первая наклонность – использовать foreach но поскольку мой метод можно было назвать много раз в одном запросе, я боюсь, что это может быть слишком медленным.

 <?php $Amp = $IsXhtml ? '&amp;' : '&'; $Parameters = array('Action' => 'ShowList', 'Page' => '2'); $QueryString = ''; foreach ($Parameters as $Key => $Value) $QueryString .= $Amp . $Key . '=' . $Value; 

Есть ли более быстрый способ?

Вы можете использовать http_build_query() для этого.

Создает строку запроса с кодировкой URL из предоставленного ассоциативного (или проиндексированного) массива.

В стороне, я был в поиске, чтобы найти лучший способ взорвать ассоциативный массив, но используя мои собственные seperators и т. Д. …

Поэтому я сделал это с помощью функции array_walk () PHP, чтобы позволить мне присоединиться к ассоциативному массиву в список параметров, который затем можно применить к тегу HTML ….

 // Create Params Array $p = Array("id"=>"blar","class"=>"myclass","onclick"=>"myJavascriptFunc()"); // Join Params array_walk($p, create_function('&$i,$k','$i=" $k=\"$i\"";')); $p_string = implode($p,""); // Now use $p_string for your html tag 

Очевидно, вы могли бы как-то придерживаться этого в своей собственной функции, но это дает вам представление о том, как вы можете присоединиться к ассоциативному массиву, используя свой собственный метод. Надеюсь, что кто-то поможет 🙂

Если вас не интересует точное форматирование, однако вам нужно что-то простое, но без разрывов строк print_r вы также можете использовать json_encode($value) для быстрого и простого форматированного вывода. ( обратите внимание, что он хорошо работает и с другими типами данных )

 $str = json_encode($arr); //output... [{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}] 

Одним из способов является использование print_r(array, true) и оно вернет строковое представление массива

Это мое решение, например, для атрибутов div div:

 <? $attributes = array( 'data-href' => 'http://example.com', 'data-width' => '300', 'data-height' => '250', 'data-type' => 'cover', ); $dataAttributes = array_map(function($value, $key) { return $key.'="'.$value.'"'; }, array_values($attributes), array_keys($attributes)); $dataAttributes = implode(' ', $dataAttributes); ?> <div class="image-box" <?= $dataAttributes; ?> > <img src="http://example.com/images/best-of.jpg" alt=""> </div> 

Это самая простая версия, о которой я могу думать:

 public function implode_key($glue = "", $pieces = array()) { $keys = array_keys($pieces); return implode($glue, $keys); } 

для shell_exec, где \ n важна, и строка должна быть обернута в "", чтобы интерпретироваться как один аргумент

function a2s($ar,$glue = "\\n"){ $rez="\""; foreach($ar as $k=>$v){ $rez.=$k."=".$v.$glue; } return $rez."\""; }

 function array_to_attributes ( $array_attributes ) { $attributes_str = NULL; foreach ( $array_attributes as $attribute => $value ) { $attributes_str .= " $attribute=\"$value\" "; } return $attributes_str; } $attributes = array( 'data-href' => 'http://example.com', 'data-width' => '300', 'data-height' => '250', 'data-type' => 'cover', ); echo array_to_attributes($attributes) ; 

Один слой для создания строки атрибутов HTML (с кавычками) из простого массива:

 $attrString = str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\""; 

Пример:

 $attrArray = array("id" => "email", "name" => "email", "type" => "email", "class" => "active large"); echo str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\""; // Output: // id="email" name="email" type="email" class="active large" 

Что относительно этого более короткого, более прозрачного, но более интуитивного с array_walk

 $attributes = array( 'data-href' => 'http://example.com', 'data-width' => '300', 'data-height' => '250', 'data-type' => 'cover', ); $args = ""; array_walk( $attributes, function ($item, $key) use (&$args) { $args .= $key ." = '" . $item . "' "; } ); // output: 'data-href="http://example.com" data-width="300" data-height="250" data-type="cover" 
 echo implode(",", array_keys($companies->toArray())); 

$companies->toArray() – это на всякий случай, если ваша $variable является объектом, иначе просто передайте компании.

Это оно!