如何在PHP中组合数组的键和值

如何在PHP中组合数组的键和值,php,arrays,Php,Arrays,假设我在PHP中有一个键/值对数组: array( 'foo' => 'bar', 'baz' => 'qux' ); 将其转换为如下数组的最简单方法是什么 array( 'foo=bar', 'baz=qux' ); i、 e 在perl中,我将执行以下操作 map { "$_=$hash{$_}" } keys %hash 在PHP中是否有类似的内容?我所看到的似乎都不是一个方便的解决办法。chaos'的回答很好,很直截了当。不过,从更一般的意义上讲,您可能错过了array

假设我在PHP中有一个键/值对数组:

array( 'foo' => 'bar', 'baz' => 'qux' );
将其转换为如下数组的最简单方法是什么

array( 'foo=bar', 'baz=qux' );
i、 e

在perl中,我将执行以下操作

map { "$_=$hash{$_}" } keys %hash

在PHP中是否有类似的内容?我所看到的似乎都不是一个方便的解决办法。

chaos'的回答很好,很直截了当。不过,从更一般的意义上讲,您可能错过了
array\u map()
函数,这是您在
map{“$\=$hash{$}}键%hash
示例中提到的

function parameterize_array($array) {
    $out = array();
    foreach($array as $key => $value)
        $out[] = "$key=$value";
    return $out;
}
// using '::' as a temporary separator, could be anything provided
// it doesn't exist elsewhere in the array
$test = split( '::', urldecode( http_build_query( $test, '', '::' ) ) );

解决此问题的另一个选项是:在PHP5.3+上,您可以使用带有闭包的
array\u map()
(您可以使用PHP5.2之前的版本进行此操作,但代码会变得非常混乱!)

“哦,但是在
array\u map()
上,您只能得到值!”

是的,没错,但我们可以映射多个数组!:)


array_map()似乎只提供数组的值幸运的是,5.3以下PHP中严格等效的代码是一个
create_function()
-使用ABONATION。啊,不,如果您需要这些键,那么您可能可以使用
array_walk()
(尽管这会修改数组而不是返回新数组).我接受这个答案,因为它直截了当,而且我最终解决了我的问题。我很失望,没有办法在一个表达式中实现这一点,从而避免使用临时$out变量。如果您是Perl用户,这将只是您在使用PHP的过程中遇到的众多失望之一。@chaos是的,生活是艰难的,PHP是可读的@虽然这并没有像你的问题所规定的那样“变换”数组。这是一个新的。“数组函数的全貌”?咯咯笑。@gzip:是的,
$foo=isset($bar['baz'])$bar['baz']:'qxx'
$foo=$bar[baz]| |'qxx'
更具可读性。无法想象我在想什么。嗯,php中添加了“?:”操作符,这样perlish的程序员就可以将所有内容放在一行上;我原以为你们会喜欢这个功能。我提出了同样的解决方案,但我对编码/解码过程(如果它是单语义的话)感到“好奇”)。我曾尝试在ORM中使用它来快速安排查询条件,但由于某种原因,我怀疑urlencode/URLEDECODE时的数据安全性。
// using '::' as a temporary separator, could be anything provided
// it doesn't exist elsewhere in the array
$test = split( '::', urldecode( http_build_query( $test, '', '::' ) ) );
$arr = array( 'foo' => 'bar', 'baz' => 'qux' );
$result = array_map(function($k, $v){
    return "$k=$v";
}, array_keys($arr), array_values($arr));