如何从数组数组(多维数组)加入逗号分隔的字符串?

时间:2015-03-23 19:37:57

标签: php arrays string multidimensional-array

好的,我知道要从PHP中的字符串数组中获取逗号分隔的字符串,你可以这样做

$stringA = array("cat","dog","mouse");
$commaSeperatedS = join(',', $stringA);

但是如果我有一个数组数组(不是简单的字符串数组)怎么办?

$myAssociativeA = 
      array(
           [0] => array("type"=>"cat", "sex"=>"male")
           , [1] => array("type"=>"dog", "sex"=>"male")
      );

我的目标是从每个数组中的特定属性中获取逗号分隔的字符串,例如" type"?我试过了

$myGoal = join(',', $myAssociativeA{'type'});

在这种情况下,$myGoal的目标值为"cat,dog"。 是否有一种简单的方法,无需手动循环遍历每个数组,提取属性,然后在最后进行连接?

5 个答案:

答案 0 :(得分:11)

这应该适合你:

(在这里,我只需使用array_column()获取您想要的列,然后使用implode()将其删除)

echo implode(",", array_column($myAssociativeA, "type"));

答案 1 :(得分:2)

另一种选择是使用array_walk()返回您想要的密钥:

array_walk($myAssociativeA, function(&$value, $key, $return) {
  $value = $value[$return];
}, 'type');

echo implode(', ', $myAssociativeA); // cat, dog

对于较旧的PHP版本很有用 - @ Rizier123使用array_column()的答案非常适合PHP 5.5.0 +

答案 2 :(得分:2)

如果你有PHP<

你可以使用它5.5.0和> = 5.3.0(感谢@Rizier123),您无法使用array_column()

<?php

$myAssociativeA = array(array("type"=>"cat", "sex"=>"male"), array("type"=>"dog", "sex"=>"male"));

$myGoal = implode(',', array_map(function($n) {return $n['type'];}, $myAssociativeA));

echo $myGoal;
?>

编辑:根据@scrowler评论中的建议现在代码是:

<?php

$myAssociativeA = array(array("type"=>"cat", "sex"=>"male"), array("type"=>"dog", "sex"=>"male"));
$column = 'type';

$myGoal = implode(',', array_map(function($n) use ($column) {return $n[$column];}, $myAssociativeA));

echo $myGoal;
?>

输出:

  

猫,狗

详细了解array_maphttp://php.net/manual/en/function.array-map.php

答案 3 :(得分:0)

你只需要遍历数组并自己生成字符串。

<?php
   $prepend = '';
   $out = '';
   $myAssociativeA = array(
      array('type' => 'cat'),
      array('type' => 'dog')
   );

   foreach($myAssociativeA as $item) {
      $out .= $prepend.$item['type'];
      $prepend = ', ';
   }
   echo $out;
?>

您可以轻松将其转换为函数。

<?php
   function implode_child($array,$key) {
     $prepend = '';
     $out = '';
     foreach($array as $item) {
        $out .= $prepend.$item[$key];
        $prepend = ', ';
     }
     return $out;
   }
?>

答案 4 :(得分:0)

好的,假设您的关联数组字段的排序方式与您使用此类代码段的方式相同。但是你仍然需要迭代数组。

$csvString = "";
foreach ( $myAssociativeA as $row ) {
    $csvRow = implode(",", $row);
    $csvString .= $csvRow . PHP_EOL;
}

现在,如果您不想将整个CSV存储在变量中(您不应该这样做),请查看http://www.w3schools.com/php/func_filesystem_fputcsv.asp并查看如何将其直接放入文件的示例。