如果没有foreach,我怎么能把这样的数组
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
一个字符串,如下所示
item1='object1', item2='object2',.... item-n='object-n'
我已经考虑过implode()
了,但它并没有用它来解决问题。
如果有必要,是否有可能不嵌套森林?
编辑:我已经更改了字符串
EDIT2/UPDATE:这个问题很久以前就被问到了。当时,我想把所有东西都写在一行中,这样我就可以使用三元运算符和嵌套内建的函数调用来支持foreach。这不是一个好的做法!编写可读的代码,无论它是否简洁都无关紧要。
在这种情况下:将foreach放在函数中将比编写一行代码更具可读性和模块化(即使所有的答案都很棒!)。
发布于 2012-07-11 15:23:43
还有另一种方式:
$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)
));
或者:
$output = implode(', ', array_map(
function ($v, $k) { return sprintf("%s='%s'", $k, $v); },
$input,
array_keys($input)
));
发布于 2012-07-11 15:20:46
您可以使用http_build_query,如下所示:
<?php
$a=array("item1"=>"object1", "item2"=>"object2");
echo http_build_query($a,'',', ');
?>
输出:
item1=object1, item2=object2
发布于 2016-06-17 23:12:38
我花费了测量(100000次迭代),粘合关联数组的最快方法是什么?
目标:获取一行1,000项,格式为:"key:value,key2:value2“
我们有数组(例如):
$array = [
'test0' => 344,
'test1' => 235,
'test2' => 876,
...
];
测试一:
使用http_build_query和str_replace
str_replace('=', ':', http_build_query($array, null, ','));
内爆1,000个元素的平均时间: 0.00012930955084904
测试二:
Use array_map和implode
implode(',', array_map(
function ($v, $k) {
return $k.':'.$v;
},
$array,
array_keys($array)
));
内爆1,000个元素的平均时间: 0.0004890081976675
测试三:
Use array_walk和implode
array_walk($array,
function (&$v, $k) {
$v = $k.':'.$v;
}
);
implode(',', $array);
内爆1,000个元素的平均时间: 0.0003874126245348
测试四:
使用foreach
$str = '';
foreach($array as $key=>$item) {
$str .= $key.':'.$item.',';
}
rtrim($str, ',');
内爆1,000个元素的平均时间: 0.00026632803902445
我可以得出结论,将阵列结合在一起的最佳方法是使用http_build_query和str_replace
https://stackoverflow.com/questions/11427398
复制相似问题