Làm cách nào để tạo danh sách được phân tách bằng dấu phẩy từ một mảng trong PHP?


113

Tôi biết cách lặp lại các mục của một mảng bằng cách sử dụng foreach và thêm dấu phẩy, nhưng việc bỏ dấu phẩy cuối cùng luôn là một điều khó khăn. Có một cách PHP dễ dàng để làm điều đó không?

$fruit = array('apple', 'banana', 'pear', 'grape');

Cuối cùng thì tôi muốn

$result = "apple, banana, pear, grape"

Câu trả lời:


231

Bạn muốn sử dụng implode cho việc này.

I E: $commaList = implode(', ', $fruit);


Có một cách để thêm dấu phẩy mà không có dấu phẩy ở cuối. Bạn sẽ muốn làm điều này nếu bạn phải thực hiện một số thao tác khác cùng lúc. Ví dụ: có thể bạn muốn trích dẫn từng loại trái cây và sau đó phân tách tất cả chúng bằng dấu phẩy:

$prefix = $fruitList = '';
foreach ($fruits as $fruit)
{
    $fruitList .= $prefix . '"' . $fruit . '"';
    $prefix = ', ';
}

Ngoài ra, nếu bạn chỉ làm điều đó theo cách "bình thường" là thêm dấu phẩy vào sau mỗi mục (giống như bạn đã làm trước đây), và bạn cần cắt bớt phần cuối cùng, chỉ cần làm $list = rtrim($list, ', '). Tôi thấy nhiều người xung quanh một cách không cần thiết substrtrong tình huống này.


4
Nó sẽ làm cho ý nghĩa hơn (nếu cố gắng để thêm dấu ngoặc kép) để gọi <code> $ fruitlist = ' "' nổ tung (. ' ""', $ Trái cây). '"'; </ Code>
cwallenpoole

Vòng lặp foreach tốt hơn nếu bạn muốn thao tác dữ liệu đó trong mảng trước khi biến nó thành một chuỗi; Ví dụ: dấu gạch chéo hoặc mysql_real_escape_string.
Naphtali Gilead

39

Đây là cách tôi đã làm:

$arr = array(1,2,3,4,5,6,7,8,9);

$string = rtrim(implode(',', $arr), ',');

echo $string;

Đầu ra:

1,2,3,4,5,6,7,8,9

Demo trực tiếp: http://ideone.com/EWK1XR

CHỈNH SỬA: Theo nhận xét của @ joseantgv, bạn có thể xóa rtrim()khỏi ví dụ trên. I E:

$string = implode(',', $arr);

5
Như đã trả lời ở trên, bạn chỉ có thể làm nổ tung ( '', $ arr)
joseantgv

@joseantgv Bạn nói đúng, tôi không biết tại sao tôi sử dụng rtrim(). Tôi nhớ lại đã gặp sự cố với việc có thêm dấu phẩy ở cuối chuỗi, nhưng không thể nhớ tình huống nó đang xảy ra.
Nate

5

Kết quả andcuối cùng là:

$titleString = array('apple', 'banana', 'pear', 'grape');
$totalTitles = count($titleString);
if ($totalTitles>1) {
    $titleString = implode(', ', array_slice($titleString, 0, $totalTitles-1)) . ' and ' . end($titleString);
} else {
    $titleString = implode(', ', $titleString);
}

echo $titleString; // apple, banana, pear and grape

3

Tương tự như câu trả lời của Lloyd, nhưng hoạt động với bất kỳ mảng kích thước nào.

$missing = array();
$missing[] = 'name';
$missing[] = 'zipcode';
$missing[] = 'phone';

if( is_array($missing) && count($missing) > 0 )
        {
            $result = '';
            $total = count($missing) - 1;
            for($i = 0; $i <= $total; $i++)
            { 
              if($i == $total && $total > 0)
                   $result .= "and ";

              $result .= $missing[$i];

              if($i < $total)
                $result .= ", ";
            }

            echo 'You need to provide your '.$result.'.';
            // Echos "You need to provide your name, zipcode, and phone."
        }

3

Tôi thích sử dụng câu lệnh IF trong vòng lặp FOR để kiểm tra để đảm bảo rằng lần lặp hiện tại không phải là giá trị cuối cùng trong mảng. Nếu không, hãy thêm dấu phẩy

$fruit = array("apple", "banana", "pear", "grape");

for($i = 0; $i < count($fruit); $i++){
    echo "$fruit[$i]";
    if($i < (count($fruit) -1)){
      echo ", ";
    }
}

2
nếu tổng số đếm chỉ khác 4?
Jyothish

1

Đôi khi bạn thậm chí không cần php cho điều này trong một số trường hợp nhất định (Ví dụ, mỗi mục đều có trong thẻ chung của chúng khi kết xuất) từ kịch bản.

Tôi sử dụng điều này rất nhiều trong các ứng dụng xương sống thực sự để cắt một số đoạn mã tùy ý:

.likers a:not(:last-child):after { content: ","; }

Về cơ bản, nhìn vào phần tử, nhắm mục tiêu tất cả ngoại trừ phần tử cuối cùng và sau mỗi mục, nó thêm một dấu phẩy. Chỉ là một cách thay thế để không phải sử dụng script trong trường hợp áp dụng.


1
$fruit = array('apple', 'banana', 'pear', 'grape');    
$commasaprated = implode(',' , $fruit);

0

Một giải pháp chức năng sẽ như thế này:

$fruit = array('apple', 'banana', 'pear', 'grape');
$sep = ','; 

array_reduce(
    $fruits,
    function($fruitsStr, $fruit) use ($sep) {
        return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit);
    },
    ''
);

0

Theo dõi cái này

$teacher_id = '';

        for ($i = 0; $i < count($data['teacher_id']); $i++) {

            $teacher_id .= $data['teacher_id'][$i].',';

        }
        $teacher_id = rtrim($teacher_id, ',');
        echo $teacher_id; exit;

-1

Nếu thực hiện các câu trả lời được trích dẫn, bạn có thể làm

$commaList = '"'.implode( '" , " ', $fruit). '"';

ở trên giả định rằng quả không rỗng. Nếu bạn không muốn đưa ra giả định đó, bạn có thể sử dụng câu lệnh if-then-else hoặc toán tử bậc ba (? :).


-2

Một cách khác có thể như thế này:

$letters = array("a", "b", "c", "d", "e", "f", "g");

$result = substr(implode(", ", $letters), 0, -3);

Đầu ra của $resultlà một danh sách được phân tách bằng dấu phẩy được định dạng độc đáo.

a, b, c, d, e, f, g

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values
$result = substr(implode(", ", $letters), 0);
echo $result

đầu ra-> a, b, c, d, e, f, g

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.