Как я могу легко удалить последнюю запятую из массива? - PullRequest
6 голосов
/ 24 сентября 2010

Допустим, у меня есть это:

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");

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

эхо "john-doe,foe-bar,oh-yeah,"

Как мне избавиться от последней запятой?

Ответы [ 10 ]

19 голосов
/ 24 сентября 2010

В качестве альтернативы вы можете использовать функцию rtrim как:

$result = '';
foreach($array as $i=>$k) {
    $result .= $i.'-'.$k.',';
}
$result = rtrim($result,',');
echo $result;
10 голосов
/ 24 сентября 2010

Мне не нравятся все предыдущие рецепты.

Php не является C и имеет высокоуровневые способы решения этой конкретной проблемы.

Я начну с того места, где у вас есть такой массив:

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

Вы можете создать такой массив из исходного, используя цикл или функцию array_map () . Обратите внимание, что я использую строки в одинарных кавычках. Это микрооптимизация, если у вас нет имен переменных, которые нужно заменить.

Теперь вам нужно сгенерировать строку CSV из этого массива, это можно сделать так:

echo implode(',', $array);
7 голосов
/ 24 сентября 2010

Один метод - 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);
3 голосов
/ 24 сентября 2010

Мне вообще не нравится идея использовать substr, так как это стиль плохого программирования.Идея состоит в том, чтобы объединить все элементы и разделить их специальными «разделяющими» фразами.Идея вызывать подстроку для этого похожа на использование лазера для стрельбы по птицам.

В проекте, которым я сейчас занимаюсь, мы пытаемся избавиться от вредных привычек в кодировании.И этот образец считается одним из них.Мы заставляем программистов писать этот код следующим образом:

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

Цель этого кода намного яснее, чем тот, который использует substr.Или вы можете просто использовать функцию implode (наш проект на Java, поэтому нам пришлось разработать собственную функцию для конкатенации строк таким образом).Вы должны использовать функцию substr только тогда, когда вам это действительно нужно.Здесь этого следует избегать, поскольку это признак плохого стиля программирования.

1 голос
/ 14 апреля 2012

Предполагая, что массив является индексом, это работает для меня.Я зацикливаю $ 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++;
}
1 голос
/ 24 сентября 2010

Я всегда использую этот метод:

$result = '';
foreach($array as $i=>$k) {
    if(strlen($result) > 0) {
        $result .= ","
    }
    $result .= $i.'-'.$k;
}
echo $result;
0 голосов
/ 15 июня 2019

Я удалил запятую из последнего значения aray, используя последний ключ массива. Надеюсь, это даст вам представление.

   $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']." , ";
                                  }

                          }
0 голосов
/ 12 марта 2016

см. Этот пример, который вы можете легко понять

$name = ["sumon","karim","akash"];
foreach($name as $key =>$value){
 echo $value;
 if($key<count($name){
     echo ",";
 }
}
0 голосов
/ 06 июля 2011

это будет делать:

rtrim ($string, ',')
0 голосов
/ 24 сентября 2010

попробуйте этот код после условия foreach, затем введите $ result1

$result1=substr($i, 0, -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...