首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中如何在没有foreach情况下内爆带有键和值的数组

PHP中如何在没有foreach情况下内爆带有键和值的数组
EN

Stack Overflow用户
提问于 2012-07-11 15:11:53
回答 12查看 182.1K关注 0票数 126

如果没有foreach,我怎么能把这样的数组

代码语言:javascript
复制
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");

一个字符串,如下所示

代码语言:javascript
复制
item1='object1', item2='object2',.... item-n='object-n'

我已经考虑过implode()了,但它并没有用它来解决问题。

如果有必要,是否有可能不嵌套森林?

编辑:我已经更改了字符串

EDIT2/UPDATE:这个问题很久以前就被问到了。当时,我想把所有东西都写在一行中,这样我就可以使用三元运算符和嵌套内建的函数调用来支持foreach。这不是一个好的做法!编写可读的代码,无论它是否简洁都无关紧要。

在这种情况下:将foreach放在函数中将比编写一行代码更具可读性和模块化(即使所有的答案都很棒!)。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-07-11 15:23:43

还有另一种方式:

代码语言:javascript
复制
$input = array(
    'item1'  => 'object1',
    'item2'  => 'object2',
    'item-n' => 'object-n'
);

$output = implode(', ', array_map(
    function ($v, $k) {
        if(is_array($v)){
            return $k.'[]='.implode('&'.$k.'[]=', $v);
        }else{
            return $k.'='.$v;
        }
    }, 
    $input, 
    array_keys($input)
));

或者:

代码语言:javascript
复制
$output = implode(', ', array_map(
    function ($v, $k) { return sprintf("%s='%s'", $k, $v); },
    $input,
    array_keys($input)
));
票数 204
EN

Stack Overflow用户

发布于 2012-07-11 15:20:46

您可以使用http_build_query,如下所示:

代码语言:javascript
复制
<?php
  $a=array("item1"=>"object1", "item2"=>"object2");
  echo http_build_query($a,'',', ');
?>

输出:

代码语言:javascript
复制
item1=object1, item2=object2 

Demo

票数 224
EN

Stack Overflow用户

发布于 2016-06-17 23:12:38

我花费了测量(100000次迭代),粘合关联数组的最快方法是什么?

目标:获取一行1,000项,格式为:"key:value,key2:value2“

我们有数组(例如):

代码语言:javascript
复制
$array = [
    'test0' => 344,
    'test1' => 235,
    'test2' => 876,
    ...
];

测试一:

使用http_build_querystr_replace

代码语言:javascript
复制
str_replace('=', ':', http_build_query($array, null, ','));

内爆1,000个元素的平均时间: 0.00012930955084904

测试二:

Use array_mapimplode

代码语言:javascript
复制
implode(',', array_map(
        function ($v, $k) {
            return $k.':'.$v;
        },
        $array,
        array_keys($array)
    ));

内爆1,000个元素的平均时间: 0.0004890081976675

测试三:

Use array_walkimplode

代码语言:javascript
复制
array_walk($array,
        function (&$v, $k) {
            $v = $k.':'.$v;
        }
    );
implode(',', $array);

内爆1,000个元素的平均时间: 0.0003874126245348

测试四:

使用foreach

代码语言:javascript
复制
    $str = '';
    foreach($array as $key=>$item) {
        $str .= $key.':'.$item.',';
    }
    rtrim($str, ',');

内爆1,000个元素的平均时间: 0.00026632803902445

我可以得出结论,将阵列结合在一起的最佳方法是使用http_build_query和str_replace

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11427398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档