4

次の配列があるとします。

Array
(
    [143] => Car #1
    [144] => Car #2
    [145] => Car #3
)

私は現在これを使用しています

implode(', ', array_values($car_names))

次のような文字列を生成します

1号車、2号車、3号車

私は実際に次のようなものを手に入れたいです

1号車、2号車、3号車

アイデアは、配列の最後の2つの要素の間に「と」を挿入することです。

配列に2つのキーと値のペアが含まれている場合(たとえば、ユーザーが2台の車を所有している場合)、コンマはありません。

1号車と2号車

また、配列に1つのキー/値が含まれている場合(たとえば、ユーザーが1台の車を所有している場合)

1号車

これを行う方法について何か提案はありますか?使ってみarray_spliceましたが、それが正しい方法かわかりません(つまり、配列に新しい要素を挿入します)。

助けてくれてありがとう!

4

7 に答える 7

6
$last = array_pop($car_names);
echo implode(', ', $car_names) . ' AND ' . $last;
于 2011-06-14T22:50:54.023 に答える
3

array_popおそらく、配列の最後の要素を削除するために使用する、このようなものが必要だと思います。次に、配列の残りの部分を内包し、カスタムの方法で最後の要素を追加できます。

$last_value = array_pop($car_names);
$output = implode(', ', array_values($car_names));
$output .= ($output ? ' and ' : '') . $last_value;

編集:配列に要素が1つしかないかどうかを確認する条件を追加しました。

于 2011-06-14T22:51:37.960 に答える
2

preg_replaceは、最後のコマンドを次のコマンドに交換するだけで検索できます。and

$yourString = preg_replace( "/, ([\w#]*)$/", "and \1", $yourString );
于 2011-06-14T22:50:44.613 に答える
2

このソリューションは少し長くなりますが、すべてのアレイサイズでテストされており、完全なソリューションです。また、上記の回答のように配列を変更せず、関数に分割されます。

function arrayToString($arr) {
    $count = count($arr);
    if ($count <= 2) {
        return implode(' and ', $arr);
    }
    $result = '';
    $i = 0;
    foreach ($arr as $item) {
        if ($i) $result .= ($i == $count - 1) ? ' and ' : ', ';
        $result .= $item;
        $i++;
    }
    return $result;
}

醜いフォーマットと変数の初期化などのグッドプラクティスを無視したコンパクトバージョン:

function arrayToString($arr) {
    if (count($arr) <= 2) return implode(' and ', $arr);
    foreach ($arr as $item) {
        if ($i) $result .= ($i == count($arr) - 1) ? ' and ' : ', ';
        $result .= $item; $i++;
    }
    return $result;
}
于 2011-06-14T22:58:08.113 に答える
0

このための組み込み関数があるかどうかはわかりませんが、このようなものは機能するはずです。

$last = $car_names[count($car_names)-1];
$implodedString = implode(', ', array_values($car_names))
$implodedString = str_replace(", $last", "and $last", $implodedString);
于 2011-06-14T22:50:51.957 に答える
0

これは、上記の私のコメントで指定された関数の例です。

  1. strrpos()-文字列内で最後に出現する部分文字列の位置を検索します
  2. substr()-文字列の一部を返します

とコード:

$text = implode(', ', array_values($car_names));
$last = strrpos($text, ',');
if ($last) $text = substr($text, 0, $last-1) . ' AND ' . substr($text, $last+1);
echo $text;
于 2011-06-14T22:58:22.200 に答える
0

これを行うにはいくつかの方法があります。これがもう1つです。

<?php
$cars = array('Car #1', 'Car #2', 'Car #3', 'Car #4');
$car = array('Car #1');
$twocars = array('Car #1', 'Car #2');

function arrayToText($arr) {
    switch (count($arr)) {
    case 1:
        return $arr[0];
        break;
    case 2:
        return implode($arr, ' and ');
        break;
    default:
        $last = array_pop($arr);
        return implode($arr, ', ') . ' and ' . $last;
        break;
    }
}

echo '<p>' . arrayToText($cars) . "</p>\n";
echo '<p>' . arrayToText($twocars) . "</p>\n";
echo '<p>' . arrayToText($car) . "</p>\n";

出力

<p>Car #1, Car #2, Car #3 and Array</p>
<p>Car #1 and Car #2</p>
<p>Car #1</p>
于 2011-06-14T23:32:06.847 に答える