Я ищу быстрый способ превратить ассоциативный массив в строку. Типичная структура будет похожа на строку запроса URL-адреса, но с настраиваемыми разделителями, поэтому я могу использовать ' &
'для ссылок xhtml или' &
'иначе.
Моя первая наклонность – использовать foreach
но поскольку мой метод можно было назвать много раз в одном запросе, я боюсь, что это может быть слишком медленным.
<?php $Amp = $IsXhtml ? '&' : '&'; $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
является объектом, иначе просто передайте компании.
Это оно!