如何从数组数组(多维数组)加入逗号分隔的字符串?
How to join into a comma-separated string from array of arrays (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"
。
有没有一种简单的方法,无需手动遍历每个数组,提取 属性,然后在最后进行连接?
您只需遍历数组并自己生成字符串。
<?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;
}
?>
这应该适合你:
(这里我只是用array_column()
and simply implode it with implode()
得到你想要的列)
echo implode(",", array_column($myAssociativeA, "type"));
另一种选择是使用 array_walk()
到 return 您想要的密钥:
array_walk($myAssociativeA, function(&$value, $key, $return) {
$value = $value[$return];
}, 'type');
echo implode(', ', $myAssociativeA); // cat, dog
对旧 PHP 版本有用 - @Rizier123 使用 array_column()
的答案对 PHP 5.5.0+
非常有用
好的,假设您的关联数组字段的排序方式始终与您可以使用这样的代码段的方式相同。但是您仍然需要遍历数组。
$csvString = "";
foreach ( $myAssociativeA as $row ) {
$csvRow = implode(",", $row);
$csvString .= $csvRow . PHP_EOL;
}
现在,如果您不想将整个 CSV 存储在变量中(您不应该这样做),请查看 http://www.w3schools.com/php/func_filesystem_fputcsv.asp 并查看如何将其直接放入文件的示例。
如果 PHP < 5.5.0 且 >= 5.3.0(感谢 )并且不能使用 array_column()
[=18,则可以使用它=]
<?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;
?>
编辑:根据 评论中的建议,现在的代码是:
<?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;
?>
输出:
cat,dog
阅读更多关于 array_map
的信息:
http://php.net/manual/en/function.array-map.php
好的,我知道要从 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"
。
有没有一种简单的方法,无需手动遍历每个数组,提取 属性,然后在最后进行连接?
您只需遍历数组并自己生成字符串。
<?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;
}
?>
这应该适合你:
(这里我只是用array_column()
and simply implode it with implode()
得到你想要的列)
echo implode(",", array_column($myAssociativeA, "type"));
另一种选择是使用 array_walk()
到 return 您想要的密钥:
array_walk($myAssociativeA, function(&$value, $key, $return) {
$value = $value[$return];
}, 'type');
echo implode(', ', $myAssociativeA); // cat, dog
对旧 PHP 版本有用 - @Rizier123 使用 array_column()
的答案对 PHP 5.5.0+
好的,假设您的关联数组字段的排序方式始终与您可以使用这样的代码段的方式相同。但是您仍然需要遍历数组。
$csvString = "";
foreach ( $myAssociativeA as $row ) {
$csvRow = implode(",", $row);
$csvString .= $csvRow . PHP_EOL;
}
现在,如果您不想将整个 CSV 存储在变量中(您不应该这样做),请查看 http://www.w3schools.com/php/func_filesystem_fputcsv.asp 并查看如何将其直接放入文件的示例。
如果 PHP < 5.5.0 且 >= 5.3.0(感谢 编辑:根据 输出: cat,dog 阅读更多关于 array_column()
[=18,则可以使用它=]
<?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;
?>
<?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