2009-09-11 55 views
5
数组的键和值组合

说我有键/值对的PHP数组:如何在PHP

array('foo' => 'bar', 'baz' => 'qux'); 

什么是改造这个到一个数组,看起来像下面的最简单方法?

array('foo=bar', 'baz=qux'); 

array(0 => 'foo=bar', 1 => 'baz=qux'); 

在Perl中,我会做这样的事情

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

有没有在PHP中的panoply of array functions这样的事情?我看起来没有什么看起来像一个方便的解

回答

9
function parameterize_array($array) { 
    $out = array(); 
    foreach($array as $key => $value) 
     $out[] = "$key=$value"; 
    return $out; 
} 
+0

我接受这个答案,因为它很直接,我怎么最终解决了我的问题。我很失望,没有办法在单个表达式中做到这一点,避免了临时$ out变量的需要。 – nohat 2009-09-11 23:36:16

+3

如果你是一个Perl用户,这将只是你在使用PHP的过程中遇到的众多失望之一。 – chaos 2009-09-11 23:45:01

+0

@ chaos是的,生活是粗糙的,php是可读的。 @nohat虽然这不会像您的问题所规定的那样“变换”数组。它创造了一个新的。 “全能阵列功能”?傻笑。 – GZipp 2009-09-12 02:30:16

0

混沌的答案很好,直接向前。尽管如此,您可能错过了array_map()函数,这就是您在map { "$_=$hash{$_}" } keys %hash例子中提到的内容。

+0

array_map(),看起来,只给你数组的值 – nohat 2009-09-11 22:49:51

+0

不幸的是,5.3中PHP中的严格等价代码是一个'create_function()' - 使用可憎的。 – chaos 2009-09-11 22:51:05

+0

啊,不,如果你需要这些键,那么你可以使用'array_walk()'来代替(尽管这会修改数组而不是返回一个新数组)。 – Amber 2009-09-11 23:45:03

3

A“好奇”的方式做到这一点= P

// using '::' as a temporary separator, could be anything provided 
// it doesn't exist elsewhere in the array 
$test = split('::', urldecode(http_build_query($test, '', '::'))); 
+0

我想出了相同的解决方案,但我很“好奇”))关于编码/解码过程,如果它的单一语义。我试图用它来快速安排ORM中的查询条件,但出于某种原因怀疑urlencode/urldecode时的数据安全性。 – 2013-05-15 14:12:02

13

此问题的另一个选项:在PHP 5.3+可以使用array_map()具有关闭(你可以用PHP 5.2之前做到这一点,但代码会变得相当混乱!)。 “

”哦,但在array_map()你只能得到价值!“。

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

$arr = array('foo' => 'bar', 'baz' => 'qux'); 
$result = array_map(function($k, $v){ 
    return "$k=$v"; 
}, array_keys($arr), array_values($arr));