将值和键的数组合并为字符串

10
我正试图将一个数组的键和值都拼接起来。我可以轻松地获取键,但发现我必须重复自己来获取值。
目前我正在做这个:
$values = array(
  'id'                    =>  $sel['id'],
  'creator_id'            =>  $sel['creator_id'],
  'campaign_id'           =>  $sel['campaign_id'],
  'save_results'          =>  $sel['save_results'],
  'send_results_url'      =>  $sel['send_results_url'],
  'reply_txt'             =>  $sel['reply_txt'],
  'allow_multiple_votes'  =>  $sel['allow_multiple_votes']
    );
    $cols = '';
    $vals = '';
    $first = true;
    foreach($values as $col => $val) {
        if(!$first) {
            $cols .= ', ';
            $vals .= ', ';
        }
        $cols .= $col;
        $vals .= $val;
        $first = false;
    }

让我感到困扰的部分是:

foreach($values as $col => $val) {
  if(!$first) {
    $cols .= ', ';
    $vals .= ', ';
  }
  $cols .= $col;
  $vals .= $val;
  $first = false;
}

有没有一种方法可以将数组键implode起来?

例如,我可以这样做:

$vals = implode(', ', $values);

我希望将值implode在一起,但我还需要对键执行相同的操作。

我也可以使用

$keys = array();
    foreach($values as $col => $val)
        $keys[] = $col;
    $cols = implode(', ', $keys);
    $rows = implode(', ', $values);

但仍需要循环遍历创建另一个数组,肯定有更好的方法,只能获取键吗?

3个回答

63
$cols = implode(', ',array_keys($values));

2

这个函数将从一个多维数组中提取键名。

<?php 
function multiarray_keys($ar) { 

    foreach($ar as $k => $v) { 
        $keys[] = $k; 
        if (is_array($ar[$k])) 
            $keys = array_merge($keys, multiarray_keys($ar[$k])); 
    } 
    return $keys; 
} 
?> 

0

print_r($values,true);

接着从结果中删除前两行和最后一行:

Array
(
    [foo] => bar
    [baz] => boom
)

1
@James 实际上,这返回一个字符串并不会输出任何东西。看一下手册,如果你所需要做的只是将数组中的键和值放入单个字符串中,那么这是一个非常可行的解决方案。 - Skeets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接