2

配列から文字列シリアルコンマを作成しようとしています。私が使用するコードは次のとおりです。

<?php
    echo "I eat " . implode(', ',array('satay','orange','rambutan'));
?>

しかし、私が得る結果:

I eat satay, orange, rambutan

できない:

I eat satay, orange, and rambutan

まだ!

だから、私は自分の関数を作りました:

<?php   
function array_to_serial_comma($ari,$konj=" and ",$delimiter=",",$space=" "){
    // If not array, then quit 
    if(!is_array($ari)){
        return false; 
    };
    $rturn=array();
    // If more than two 
    // then do actions
    if(count($ari)>2){
        // Reverse array
        $ariBlk=array_reverse($ari,false);
        foreach($ariBlk as $no=>$c){
            if($no>=(count($ariBlk)-1)){ 
                $rturn[]=$c.$delimiter;
            }else{
                $rturn[]=($no==0)? 
                    $konj.$c
                    : $space.$c.$delimiter; 
            };
        };
        // Reverse array
        // to original
        $rturn=array_reverse($rturn,false);
        $rturn=implode($rturn);
    }else{
        // If >=2 then regular merger 
        $rturn=implode($konj,$ari); 
    }; 
    // Return 
    return $rturn; 
 }; 
?>

したがって:

<?php
    $eat = array_to_serial_comma(array('satay','orange','rambutan'));
    echo "I eat $eat";
?>

結果:

I eat satay, orange, and rambutan

おそらくネイティブPHP関数を使用して、より効率的な方法はありますか?

編集:

@Mash からのコードに基づいて、役に立つかもしれないコードを変更します。

<?php
function array_to_serial_comma($ari,$konj=" and ",$delimiter=",",$space=" "){
    // If not array, then quit 
    if(!is_array($ari)){
        return false; 
    };
    $rturn=array();
    // If more than two 
    // then do actions
    if(count($ari)>2){
        $akr = array_pop($ari);
        $rturn = implode($delimiter.$space, $ari) . $delimiter.$konj.$akr;
    }else{
        // If >=2 then regular merger 
        $rturn=implode($konj,$ari); 
    }; 
    // Return 
    return $rturn; 
 }; 
?>
4

5 に答える 5

8

よりクリーンな方法を次に示します。

<?php
    $array = array('satay','orange','rambutan');
    $last = array_pop($array);
    echo "I eat " . implode(', ', $array) . ", and " . $last;
?>

array_pop()配列から最後の要素を取り出して代入します$last

于 2013-08-13T12:35:31.330 に答える
1
<?php
    $arr = array('satay','orange','rambutan');
    print("I eat ".implode(", ", array_slice($arr, 0, count($arr)-1))." and ".$arr[count($arr)-1]);
?>
于 2013-08-13T12:35:19.593 に答える
1

このようにしてみてください:

$array = array('satay','orange','rambutan');
echo "I eat ".join(' and ', array_filter(array_merge(array(join(', ', array_slice($array, 0, -1))), array_slice($array, -1))));

重複した質問:配列を ", " で内破し、最後の項目の前に "and " を追加します

于 2013-08-13T12:35:27.877 に答える
0
<?php
$arr = array('satay','orange','rambutan');
$lastElement = array_pop($arr);
echo "I eat " . implode(', ',$arr)." and ".$lastElement;
?>

これは同じ結果になります:私はサテ、オレンジ、ランブータンを食べます

于 2013-08-13T12:46:18.317 に答える
0

これはどう?

function render_array_as_serial_comma($items) {
  $items = $variables['items'];

  if (count($items) > 1) {
    $last = array_pop($items);
    return implode(', ', $items) . ' and ' . $last;
  }
  return array_pop($items);
}

これにより、次のことが行われます。

echo render_array_as_serial_comma(array('a'));
echo render_array_as_serial_comma(array('a', 'b'));
echo render_array_as_serial_comma(array('a', 'b', 'c'));

a
a and b
a, b and c
于 2013-09-06T15:19:26.710 に答える