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

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

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

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

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

104 голоса | спросил matpie 3 Jam1000000amSat, 03 Jan 2009 00:06:17 +030009 2009, 00:06:17

10 ответов


0

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

  

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

ответил Greg 3 Jam1000000amSat, 03 Jan 2009 00:09:06 +030009 2009, 00:09:06
0

Кроме того, я искал лучший способ взорвать ассоциативный массив, но с использованием моих собственных разделителей и т. д.

Итак, я сделал это с помощью функции PHP array_walk (), которая позволила мне объединить ассоциативный массив в список параметров, которые затем можно применить к тегу 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

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

ответил 3 FebruaryEurope/MoscowbTue, 03 Feb 2009 17:06:21 +0300000000pmTue, 03 Feb 2009 17:06:21 +030009 2009, 17:06:21
0

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

$str = json_encode($arr);
//output...
[{"id":"123","name":"Ice"},{"id":"234","name":"Cake"},{"id":"345","name":"Pie"}]
ответил scunliffe 12 +04002014-10-12T07:12:17+04:00312014bEurope/MoscowSun, 12 Oct 2014 07:12:17 +0400 2014, 07:12:17
0

Это мое решение, например, для атрибутов данных 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>
ответил user4846194 29 PMpWed, 29 Apr 2015 14:41:20 +030041Wednesday 2015, 14:41:20
0

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

ответил dino.keco 5 Jpm1000000pmSat, 05 Jan 2013 19:13:53 +040013 2013, 19:13:53
0
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) ;
ответил dino.keco 5 Jpm1000000pmSat, 05 Jan 2013 19:13:53 +040013 2013, 19:13:53
0

Однострочник для создания строки атрибутов 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"
ответил WackGet 27 PMpThu, 27 Apr 2017 21:30:22 +030030Thursday 2017, 21:30:22
0

А как насчет этого более короткого, прозрачного и интуитивно понятного с 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"
ответил FantomX1 3 52017vEurope/Moscow11bEurope/MoscowFri, 03 Nov 2017 19:21:03 +0300 2017, 19:21:03
0

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

public function implode_key($glue = "", $pieces = array())
{
    $keys = array_keys($pieces);
    return implode($glue, $keys);
}
ответил Failpunk 18 MaramFri, 18 Mar 2011 05:49:33 +03002011-03-18T05:49:33+03:0005 2011, 05:49:33
0
echo implode(",", array_keys($companies->toArray()));

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

Вот и все!

ответил Hardik Raval 11 MaramFri, 11 Mar 2016 07:53:52 +03002016-03-11T07:53:52+03:0007 2016, 07:53:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132