我正在尝试从数组生成字符串。在值之后,需要使用小字符串将数组值连接起来。它对于最后的值不起作用。
$data = array (
1 => array (
'symbol' => 'salad'
),
2 => array (
'symbol' => 'wine'
),
3 => array (
'symbol' => 'beer'
)
);
$symbols = array_column($data, 'symbol');
$string_from_array = join($symbols, 'bar');
echo($string_from_array);
// expected output: saladbar, winebar, beerbar
// output: saladbar, winebar, beer
答案 0 :(得分:3)
您可以通过几种不同的方法来实现它。一个实际上是通过使用implode()
。如果至少有一个元素,我们可以通过定界符"bar, "
内爆,并在其后附加一个bar
。如果count()
数组中没有结果,我们将对bar
进行检查以防止打印$symbols
。
$symbols = array_column($data, "symbol");
if (count($symbols)) {
echo implode("bar, ", $symbols)."bar";
}
答案 1 :(得分:3)
您还可以使用array_map()达到所需的结果,如下所示:
<?php
$data = array (
1 => array (
'symbol' => 'salad'
),
2 => array (
'symbol' => 'wine'
),
3 => array (
'symbol' => 'beer'
)
);
$symbols = array_column($data, 'symbol');
$mapped = array_map(function($e){
return $e . "bar";
},$symbols);
$string_from_array = join(", ",$mapped);
echo($string_from_array);
请参见live code
Array_map()接受$symbols
数组的每个元素,并在字符串“ bar”后面附加一个回调,该回调由一个匿名函数组成,该函数返回将结果分配给新数组中相应元素的结果$mapped.
然后,数组$mapped
的元素值与“,”连接以形成预期的输出,然后将其分配给$ string_from_array。
答案 2 :(得分:1)
join()函数是implode()的别名
返回一个字符串,其中包含所有数组的字符串表示形式 元素以相同的顺序排列,每个元素之间的粘合字符串 。
所以您需要自己添加最后一个
$data = array (
1 => array (
'symbol' => 'salad'
),
2 => array (
'symbol' => 'wine'
),
3 => array (
'symbol' => 'beer'
)
);
$symbols = array_column($data, 'symbol');
$string_from_array = join($symbols, 'bar');
if(strlen($string_from_array)>0)
$string_from_array .= "bar";
echo($string_from_array);
答案 3 :(得分:1)
您可以使用array_column
和implode
$data = array (
1 => array (
'symbol' => 'salad'
),
2 => array (
'symbol' => 'wine'
),
3 => array (
'symbol' => 'beer'
)
);
$res = implode("bar,", array_column($data, 'symbol'))."bar";
答案 4 :(得分:0)
尝试一下:
$symbols = array_column($data, 'symbol');
foreach ($symbols as $symbol) {
$symbol = $symbol."bar";
echo $symbol;
}
顺便说一句,您不能指望内爆会像您期望的那样进行,因为它会在字符串之间 放置“条”,并且在最后一个字符串之后没有 您可以从阵列中获得。 ;)
答案 5 :(得分:0)
另一种方法可能是使用for
循环:
$res = "";
$count = count($data);
for($i = 1; $i <= $count; $i++) {
$res .= $data[$i]["symbol"] . "bar" . ($i !== $count ? ", " : "");
}
echo $res; //saladbar, winebar, beerbar