【问题标题】:How to join into a comma-separated string from array of arrays (multidimensional-array)?如何从数组数组(多维数组)中加入逗号分隔的字符串?
【发布时间】:2015-05-26 22:54:04
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 尝试使用implode函数:$myGoal = implode(',', $myAssociativeA{'type'});
  • 您期望的输出是什么? (@bcesars join 和 implode 是一样的)
  • @bcesars,我试过 implode,它给了我一个错误
  • @Rizier123,我已经用我希望的输出更新了我的问题
  • @AmmarCSE 在下面看到我的答案

标签: php arrays string multidimensional-array


【解决方案1】:

如果您的 PHP = 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_map的信息: http://php.net/manual/en/function.array-map.php

【讨论】:

  • 嘿,我不知道为什么人们投票给你。它在 PHP 上对我有用
  • @AmmarCSE 他们疯了,病了!
  • 我不是反对者,但我认为这是因为它无法拥有动态列(类型),因为您已将其硬编码到回调中
  • @scrowler 谢谢,我会根据你的建议进行编辑,但并非所有答案都有这个,而且他们没有被否决。
  • @AdrianCidAlmaguer 这两个被赞成的答案具有这种灵活性;)
【解决方案2】:

好的,假设您的 assoc 数组字段的排序方式始终与您可以像这样使用 sn-p 的方式相同。但是您仍然需要遍历数组。

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

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

【讨论】:

  • 只是想我会提到 CSV(格式标准)和逗号分隔之间存在差异
  • 我同意 - CSV 标准包含其他详细信息,而不仅仅是分隔符。从这个问题我得到的印象是他的问题是如何序列化 assoc 数组,所以我专注于这个问题。
【解决方案3】:

另一种选择是使用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+

【讨论】:

    【解决方案4】:

    这应该适合你:

    (这里我只是用array_column() 得到你想要的列,然后用implode() 简单地内爆它)

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

    【讨论】:

    【解决方案5】:

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

    <?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;
       }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2015-06-23
      • 2014-05-27
      • 2023-03-14
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多