多维数组 PHP Implode

22

就我的数据结构而言,我有一个包含通信的数组,每个通讯ID本身都包含三个信息:ID、分数和内容。

我想将这个数组合并,以便得到逗号分隔的ID列表,如何实现?


1
你好,能否提供一下数据结构和所需的CSV文件示例?不过我认为可以使用implode和一些循环来完成。 - SubniC
5个回答

60

PHP 5.5更新内容

PHP 5.5引入了array_column函数,它是array_map用法的便捷快捷方式,同样适用于这里。

$ids = array_column($communications, 'id');
$output = implode(',', $ids);

最初的回答

你需要从你的通信数组中创建一个仅包含 id 的数组。然后 implode 就很容易了。

提示: 实现这个功能的函数是 array_map

解决方案:

假设 PHP 版本为 5.3,否则你需要将回调函数写成字符串形式。

$ids = array_map(function($item) { return $item['id']; }, $communications);
$output = implode(',', $ids);

我很好奇$item代表什么? - Spencer
@Spencer:它代表$communications中的“每一个”项目,因为它被传递给回调函数以映射到其他内容。这只是一个形式参数的名称;您也可以使用任何其他名称。 - Jon
非常感谢!我有一个最后的问题。如果只想获取前60个ID,你会建议我如何做? - Spencer
1
@Spencer: $firstN = array_slice($allOfThem, 0, $n);. PHP数组函数非常实用和多功能。花些时间熟悉它们:http://www.php.net/manual/en/ref.array.php。 - Jon

4
你可以查看array_walk_recursive函数。下面是一个可工作的代码片段,用于创建递归数组到字符串的转换:
$array = 
  array(
    "1"    => "PHP code tester Sandbox Online",  
    "foo"  => "bar", 
     5 , 
     5     => 89009, 
    "case" => "Random Stuff", 
    "test" => 
       array(
         "test"  => "test221",
         "test2" => "testitem"
       ),
    "PHP Version" => phpversion()
  );

$string="";

$callback = 
  function ($value, $key) use (&$string) {
     $string .= $key . " = " . $value . "\n";
  };

array_walk_recursive($array, $callback);

echo $string;
## 1 = PHP code tester Sandbox Online
## foo = bar
## 2 = 5
## 5 = 89009
## case = Random Stuff
## test = test221
## test2 = testitem
## PHP Version = 7.1.3

3

来自http://snipplr.com/view.php?codeview&id=10187:

class Format {
    static public function arr_to_csv_line($arr) {
        $line = array();
        foreach ($arr as $v) {
            $line[] = is_array($v) ? self::arr_to_csv_line($v) : '"' . str_replace('"', '""', $v) . '"';
        }
        return implode(",", $line);
    }

    static public function arr_to_csv($arr) {
        $lines = array();
        foreach ($arr as $v) {
            $lines[] = self::arr_to_csv_line($v);
        }
        return implode("\n", $lines);
    }

}

0

这个评论基于@jon的解决方案,只需添加功能代码块

但是我必须使用循环,因为array_map不接受第二个参数

function array_column_implode($data_array = array(),$key = 'id', $delimiter = ',')
{
  if (function_exists('array_column'))
  {
    return implode($delimiter, array_column($data_array, $key));
  }
  else
  {
    $new_data_array = array();
    foreach ($data_array as $value) {
      if (isset($value[$key]))
      {
        $new_data_array[] = $value[$key];
      }
    }
    return implode($delimiter, $new_data_array);
  }
}

0

对于其他寻求答案的人,这是我能够做到的:

$singleDimensionalArray = array();

foreach($array["1"]["2"]["3"][...] as $value) {
    $singleDimensionalArray[] = $value;
}

我在一个三维数组中使用了这个。


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