如何在最后一个数组值之后加入字符串?

时间:2019-05-11 21:33:27

标签: php arrays

我正在尝试从数组生成字符串。在值之后,需要使用小字符串将数组值连接起来。它对于最后的值不起作用。

$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

6 个答案:

答案 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_columnimplode

$data = array (
  1 => array (
   'symbol' => 'salad'
  ),
  2 => array (
    'symbol' => 'wine' 
  ),
  3 => array (
   'symbol' => 'beer'
  )
 );
 $res  = implode("bar,", array_column($data, 'symbol'))."bar";

Live Demo

答案 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

Php demo