2010-09-24 59 views

回答

16

或者您可以使用rtrim功能:

$result = ''; 
foreach($array as $i=>$k) { 
    $result .= $i.'-'.$k.','; 
} 
$result = rtrim($result,','); 
echo $result; 
+3

是啊,忘了微调。 +1 – 2010-09-24 05:06:59

+0

我更喜欢这个,谢谢。 – Bastien 2010-09-24 05:16:09

+0

太糟糕了php不支持'unset($ result [strlen($ result)-1])''。这将是非常好的... – NikiC 2010-09-24 06:44:38

7

一种方法是使用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); 
+0

感谢你的帮助 – Bastien 2010-09-24 05:11:01

0

后试试这个代码foreach条件然后echo $ result1

$result1=substr($i, 0, -1); 
3

我不喜欢这种使用substr的想法,因为它是糟糕的编程风格。这个想法是连接所有元素,并通过特殊的“分离”短语将它们分开。为此调用子字符串的想法就像使用激光来拍摄鸟类。

在我目前正在处理的项目中,我们试图摆脱编码中的不良习惯。这个样本被认为是其中之一。我们强迫程序员这样写这样的代码:

$first = true; 
$result = ""; 
foreach ($array as $i => $k) { 
    if (!$first) $result .= ","; 
    $first = false; 
    $result .= $i.'-'.$k; 
} 
echo $result; 

这段代码的目的比使用substr的更清晰。或者你可以简单地使用implode函数(我们的项目是用Java编写的,所以我们必须设计自己的函数来连接字符串)。只有当你有真正需要时才应该使用substr函数。这应该避免,因为这是一种糟糕的编程风格。

+0

这是一种糟糕的编程风格吗?你介意为我们所有人介绍一下吗?据我所知,这并不妨碍表演。我可以理解清晰度的一部分,但同时也不难读出substr做什么来解决这个问题。谢谢! – 2010-09-24 13:25:49

+0

恕我直言,每个工具都应该在程序中适当地使用,并且它不是用于字符串连接的substr目的,而是针对其他问题而设计的。此外,与substr的这个代码看起来很清楚,只有它在一个地方。如果有这样的许多碎片,代码就变成不可读的。因此,在我们的项目中,我们改为正常连接,并为此做了一个特殊功能。现在处理字符串的项目的部分更具可读性。 – 2010-09-25 13:51:31

+0

非常感谢你为这个伟大而专业的解决方案。 (y) – 2016-04-10 13:47:34

1

我一直用这个方法:

$result = ''; 
foreach($array as $i=>$k) { 
    if(strlen($result) > 0) { 
     $result .= "," 
    } 
    $result .= $i.'-'.$k; 
} 
echo $result; 
+0

对此使用strlen的错误主意。请参阅Joel Spolsky的“返回基础知识”文章,以了解为什么。只需使用一个布尔标志来执行这样的检查,因为在最坏的情况下(数组有N个元素 - 单个字符),您将以O(N^2)复杂度结束。 – 2010-09-24 06:15:41

+0

一般来说,不要使用字符串函数来达到某些效果,这可以通过简单的编程技巧轻松实现(对于使用substr来消除最后一个逗号也是如此 - 最好不要生成最后一个comman)。 – 2010-09-24 06:17:46

10

我不喜欢所有以前的食谱。

Php不是C,并有更高级别的方法来处理这个特定的问题。

我将开始从那里你有一个这样的数组点:

$array = array('john-doe', 'foe-bar', 'oh-yeah'); 

你可以建立从使用循环或array_map()功能的初始一个这样的数组。请注意,我正在使用单引号字符串。如果您没有需要替换的变量名称,这是一个微型优化。

现在你需要生成此数组一个CSV字符串,这是可以做到这样的:

echo implode(',', $array); 
+0

这种方法的好处是我们可以更容易地更改分隔符。此外,您可以将字符串分解为稍后类似于此的数组。对于更清洁的方法,不确定性能缺陷 – thethanghn 2010-09-24 06:36:58

+0

+1。 – NikiC 2010-09-24 06:43:51

+0

我更喜欢这个。如果你不需要,不要循环。 – Powertieke 2010-09-24 06:44:02

0

这会做:

rtrim ($string, ',') 
1

假设数组的索引,这是为我工作。我循环$ 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++; 
} 
0

看到这个例子中,你可以很容易地理解

$name = ["sumon","karim","akash"]; 
foreach($name as $key =>$value){ 
echo $value; 
if($key<count($name){ 
    echo ","; 
} 
}