PHP中数组的串行逗号
我正在尝试从数组生成字符串。以下是我使用的代码:PHP中数组的串行逗号,php,function,native,Php,Function,Native,我正在尝试从数组生成字符串。以下是我使用的代码: <?php echo "I eat " . implode(', ',array('satay','orange','rambutan')); ?> 不能: I eat satay, orange, and rambutan 然而 因此,我制定了自己的函数: <?php function array_to_serial_comma($ari,$konj=" and ",$delimiter=",",$space
<?php
echo "I eat " . implode(', ',array('satay','orange','rambutan'));
?>
不能:
I eat satay, orange, and rambutan
然而
因此,我制定了自己的函数:
<?php
function array_to_serial_comma($ari,$konj=" and ",$delimiter=",",$space=" "){
// If not array, then quit
if(!is_array($ari)){
return false;
};
$rturn=array();
// If more than two
// then do actions
if(count($ari)>2){
// Reverse array
$ariBlk=array_reverse($ari,false);
foreach($ariBlk as $no=>$c){
if($no>=(count($ariBlk)-1)){
$rturn[]=$c.$delimiter;
}else{
$rturn[]=($no==0)?
$konj.$c
: $space.$c.$delimiter;
};
};
// Reverse array
// to original
$rturn=array_reverse($rturn,false);
$rturn=implode($rturn);
}else{
// If >=2 then regular merger
$rturn=implode($konj,$ari);
};
// Return
return $rturn;
};
?>
有没有更有效的方法,使用原生PHP函数
编辑:
基于@Mash中的代码,我修改了可能有用的代码:
<?php
function array_to_serial_comma($ari,$konj=" and ",$delimiter=",",$space=" "){
// If not array, then quit
if(!is_array($ari)){
return false;
};
$rturn=array();
// If more than two
// then do actions
if(count($ari)>2){
$akr = array_pop($ari);
$rturn = implode($delimiter.$space, $ari) . $delimiter.$konj.$akr;
}else{
// If >=2 then regular merger
$rturn=implode($konj,$ari);
};
// Return
return $rturn;
};
?>
试着这样做:
$array = array('satay','orange','rambutan');
echo "I eat ".join(' and ', array_filter(array_merge(array(join(', ', array_slice($array, 0, -1))), array_slice($array, -1))));
重复问题:这里有一个更简洁的方法:
<?php
$array = array('satay','orange','rambutan');
$last = array_pop($array);
echo "I eat " . implode(', ', $array) . ", and " . $last;
?>
array\u pop()
从数组中取出最后一个元素,并将其分配给$last
<?php
$arr = array('satay','orange','rambutan');
$lastElement = array_pop($arr);
echo "I eat " . implode(', ',$arr)." and ".$lastElement;
?>
这将产生相同的结果:
我吃沙爹、橘子和红毛丹,这个怎么样
function render_array_as_serial_comma($items) {
$items = $variables['items'];
if (count($items) > 1) {
$last = array_pop($items);
return implode(', ', $items) . ' and ' . $last;
}
return array_pop($items);
}
这应做到以下几点:
echo render_array_as_serial_comma(array('a'));
echo render_array_as_serial_comma(array('a', 'b'));
echo render_array_as_serial_comma(array('a', 'b', 'c'));
a
a and b
a, b and c
我喜欢它,但它打破了阵列。。。如果我们以后想使用它呢?为什么不
introde(“and”,array(introde(',',$array),$last))代码>?@AngeloGeels:当然。但我还是不喜欢这样拆开阵列的想法。这是一个很好的攻击,但它仍然是一个攻击。而且,在一个空数组中,它将显示“我吃东西和”。。。对于一个只有一个元素的数组,il将生成“我吃和撒爹”@bayuah我想你可以在任何数量的枚举(2个或更多…)中放置逗号,这是我的源代码,它很详细,但如果我们再次需要它,它可以放在函数中。我相信它比Mash的答案更简洁,而且它对空数组或1个元素的数组更有效,所以我投你一票。这实际上是我用Python编写代码的方式!另外,谢谢你找到了副本。
<?php
$array = array('satay','orange','rambutan');
$last = array_pop($array);
echo "I eat " . implode(', ', $array) . ", and " . $last;
?>
<?php
$arr = array('satay','orange','rambutan');
$lastElement = array_pop($arr);
echo "I eat " . implode(', ',$arr)." and ".$lastElement;
?>
function render_array_as_serial_comma($items) {
$items = $variables['items'];
if (count($items) > 1) {
$last = array_pop($items);
return implode(', ', $items) . ' and ' . $last;
}
return array_pop($items);
}
echo render_array_as_serial_comma(array('a'));
echo render_array_as_serial_comma(array('a', 'b'));
echo render_array_as_serial_comma(array('a', 'b', 'c'));
a
a and b
a, b and c