【发布时间】:2011-04-16 14:32:48
【问题描述】:
假设我有这个:
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
回声"john-doe,foe-bar,oh-yeah,"
如何去掉最后一个逗号?
【问题讨论】:
假设我有这个:
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
回声"john-doe,foe-bar,oh-yeah,"
如何去掉最后一个逗号?
【问题讨论】:
一种方法是使用substr
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
$output = "";
foreach($array as $i=>$k)
{
$output .= $i.'-'.$k.',';
}
$output = substr($output, 0, -1);
echo $output;
另一种方法是使用implode
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
$output = array();
foreach($array as $i=>$k)
{
$output[] = $i.'-'.$k;
}
echo implode(',', $output);
【讨论】:
您也可以将rtrim 函数用作:
$result = '';
foreach($array as $i=>$k) {
$result .= $i.'-'.$k.',';
}
$result = rtrim($result,',');
echo $result;
【讨论】:
unset($result[strlen($result)-1])。那就太好了……
string[0] = 'a'。所以你可以改变它们。只有取消设置字符串偏移是不可能的。这对我来说没有意义,因为字符串支持除unset (offsetUnset) 之外的所有数组操作(offsetGet、offsetSet、offsetExists)。
ArrayAccess 接口定义的操作之一。这些恕我直言是数组操作;)
在 foreach 条件之后尝试此代码,然后 echo $result1
$result1=substr($i, 0, -1);
【讨论】:
我根本不喜欢这种使用 substr 的想法,因为这是糟糕的编程风格。这个想法是连接所有元素并通过特殊的“分离”短语将它们分开。为此调用子字符串的想法就像使用激光射击鸟一样。
在我目前正在处理的项目中,我们试图摆脱编码中的不良习惯。这个样本被认为是其中之一。我们强迫程序员这样写代码:
$first = true;
$result = "";
foreach ($array as $i => $k) {
if (!$first) $result .= ",";
$first = false;
$result .= $i.'-'.$k;
}
echo $result;
这段代码的目的比使用 substr 的代码要清楚得多。或者您可以简单地使用 implode 函数(我们的项目是用 Java 编写的,所以我们必须设计自己的函数来以这种方式连接字符串)。只有当你真正需要它时,你才应该使用 substr 函数。这里应该避免这种情况,因为这是不良编程风格的标志。
【讨论】:
我总是用这个方法:
$result = '';
foreach($array as $i=>$k) {
if(strlen($result) > 0) {
$result .= ","
}
$result .= $i.'-'.$k;
}
echo $result;
【讨论】:
我不喜欢以前的所有食谱。
Php 不是 C 语言,并且有更高级别的方法来处理这个特殊问题。
我将从你有这样一个数组的地方开始:
$array = array('john-doe', 'foe-bar', 'oh-yeah');
您可以使用循环或 array_map() 函数从初始数组构建这样一个数组。请注意,我使用的是单引号字符串。如果您没有需要替换的变量名,这是一个微优化。
现在你需要从这个数组生成一个 CSV 字符串,可以这样做:
echo implode(',', $array);
【讨论】:
array_map功能,但感谢 Captaintokyo。 @Powertieke,它确实循环,因为array_map() 必须循环遍历数据。我认为 OP 发布的数组只是他在其他地方获得的数据的演示。
这样就可以了:
rtrim ($string, ',')
【讨论】:
假设数组是一个索引,这对我有用。我循环 $i 并针对 $key 测试 $i。当键结束时,逗号不打印。请注意,IF 有两个值,以确保第一个值的开头没有逗号。
foreach($array as $key => $value)
{
$w = $key;
//echo "<br>w: ".$w."<br>";// test text
//echo "x: ".$x."<br>";// test text
if($w == $x && $w != 0 )
{
echo ", ";
}
echo $value;
$x++;
}
【讨论】:
看这个例子你就很容易理解了
$name = ["sumon","karim","akash"];
foreach($name as $key =>$value){
echo $value;
if($key<count($name){
echo ",";
}
}
【讨论】:
我使用数组的最后一个键从数组的最后一个值中删除了逗号。希望这会给你一些想法。
$last_key = end(array_keys($myArray));
foreach ($myArray as $key => $value ) {
$product_cateogry_details="SELECT * FROM `product_cateogry` WHERE `admin_id`='$admin_id' AND `id` = '$value'";
$product_cateogry_details_query=mysqli_query($con,$product_cateogry_details);
$detail=mysqli_fetch_array($product_cateogry_details_query);
if ($last_key == $key) {
echo $detail['product_cateogry'];
}else{
echo $detail['product_cateogry']." , ";
}
}
【讨论】: