如何在PHP中没有前叉的情况下用键和值内爆数组

2022-08-30 07:02:52

没有前叉,我怎么能像这样转动一个数组

array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");

到像这样的字符串

item1='object1', item2='object2',.... item-n='object-n'

我已经想过了,但它并没有用它来内爆钥匙。implode()

如果有必要,是否有可能不嵌套前额?

编辑:我更改了字符串


编辑2/更新:这个问题很久以前就被问过了。当时,我想在一行中编写所有内容,这样我就可以使用三元运算符并嵌套内置的函数调用,以支持foreach。这不是一个好的做法!编写可读的代码,无论它是否简洁都无关紧要。

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


答案 1

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

<?php
  $a=array("item1"=>"object1", "item2"=>"object2");
  echo http_build_query($a,'',', ');
?>

输出:

item1=object1, item2=object2 

演示


答案 2

和另一种方式:

$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)
));