如何在没有 foreach 的情况下在 PHP 中使用键和值来内爆数组

新手上路,请多包涵

没有 foreach ,我怎么能像这样转一个数组

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

像这样的字符串

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

我已经考虑过 implode() ,但它并没有用它来爆破钥匙。

如果需要foreach,是否可以不嵌套foreach?

编辑: 我改变了字符串


EDIT2/UPDATE: 这个问题是很久以前提出的。那时,我想将所有内容写在一行中,因此我将使用三元运算符并嵌套内置函数调用以支持 foreach。那不是一个好习惯!编写可读的代码,是否简洁并不重要。

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

原文由 tom91136 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
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)
));

原文由 Yoshi 发布,翻译遵循 CC BY-SA 3.0 许可协议

此外,如果问题已过时并且不再要求解决方案,我只是发现自己需要打印一个数组以进行调试(抛出异常并显示导致问题的数组)。

出于这个原因,无论如何我提出了我的简单解决方案(一行,就像最初问的那样):

 $array = ['a very' => ['complex' => 'array']];
$imploded = var_export($array, true);

这将返回导出的 var 而不是直接将其打印在屏幕上,并且 var $imploded 将包含完整的导出。

原文由 Aerendir 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题