Предположим, у меня это:
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); foreach($array as $i=>$k) { echo $i.'-'.$k.','; }
эхо "john-doe,foe-bar,oh-yeah,"
Как мне избавиться от последней запятой?
В качестве альтернативы вы можете использовать функцию rtrim
как:
$result = ''; foreach($array as $i=>$k) { $result .= $i.'-'.$k.','; } $result = rtrim($result,','); echo $result;
Мне не нравятся все предыдущие рецепты.
Php не является C и имеет более высокий уровень способов решения этой конкретной проблемы.
Я начну с того момента, когда у вас есть такой массив:
$array = array('john-doe', 'foe-bar', 'oh-yeah');
Вы можете построить такой массив из исходного с помощью функции loop или array_map () . Обратите внимание, что я использую строки с одной кавычкой. Это микро-оптимизация, если у вас нет имен переменных, которые необходимо заменить.
Теперь вам нужно создать строку CSV из этого массива, это можно сделать следующим образом:
echo implode(',', $array);
Один из методов – использование 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);
Мне не нравится эта идея использования 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;
Предполагая, что массив является индексом, это работает на меня. Я петлю $ i и тестирую $ 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++; }
попробуйте этот код после условия foreach, тогда echo $ result1
$result1=substr($i, 0, -1);
это сделало бы:
rtrim ($string, ',')
см. этот пример, вы можете легко понять
$name = ["sumon","karim","akash"]; foreach($name as $key =>$value){ echo $value; if($key<count($name){ echo ","; } }