
hoge[0]に対して、配列の中身を処理して, 最後にカンマを付与
hoge[1]に対して、配列の中身を処理して, 最後にカンマを付与
hoge[2]に対して、配列の中身を処理して, 最後にカンマを付与
hoge[3]に対して、配列の中身を処理して, 最後にカンマを付与しない
というようなことをするとき、
どう書けばよいでしょうか?
for ($i = 0 ; $i <count($hoge); $i++) {
if($i< count($hoge)-1){
//配列の要素が最後じゃないのに対する処理
.",";
}else{
//配列の要素が最後のに対する処理
}
}
ってしたら、とりあえず、動いたのですが、
普通はどういう風に書くのでしょうか?
foreachとか、あるいは、配列の最後に対してする何か
書き方ってあるのでしょうか
No.5ベストアンサー
- 回答日時:
何故最後にカンマを付与しないのかの理由によりますね。
連結してCSVのようにしたいのなら、
$val = array("a","b","c");
$str = implode(",",array_map( function($x){ return "<<$x>>";}, $val));
とか。
全部に付けちゃって、ループ終了後に削るというのもあり。
回答ありがとうございました。
>$str = implode(",",array_map( function($x){ return "<<$x>>";}, $val));
array_map、これまで使ったことがなかったので、大変参考になりました。
また、自分の環境(5.2.5)では、そのままだとエラーになったのですが、
無名関数部分を分解すると動きました。
「無名関数は PHP 5.3.0 以降で使用可能です。」てことですよね…
>全部に付けちゃって、ループ終了後に削るというのもあり。
なるほど…。そういう考えもありですねー
No.6
- 回答日時:
難しく考える必要はありません。
1番の方が既に正解を書いてますが、> $result = implode(",", $hoge);
の1行が正解です。$hogeに値が入っているのならこの1行だけで事足ります。
なお、
>foreach($hoge as $key => $val){
>$hoge[$key] = $val; // $val を処理して配列に戻す処理
>}
はforeach前と後とで同じ値なので不要です。
ループを削除するからunsetも不要です。
No.4
- 回答日時:
カンマをつけるだけなら既出のとおりimplodeだとして
処理が必要なときはこんな感じで処理していますね
<?PHP
$hoge=range(1,4);
foreach($hoge as $val){
if($str!="") $str.=",";
$str.="'{$val}'";
}
print $str."<br>";
?>
回答ありがとうございました。
>foreach($hoge as $val){
>if($str!="") $str.=",";
3の方もそうですが、foreachの中で、こういったif文判定の書き方ってできるんですねー。
No.3
- 回答日時:
「配列の中身を処理」の部分が、最後とそれ以外が同じなのでしたら、順番をちょっと変えて
hoge[0]に対して、配列の中身を処理
hoge[1]に対して、最初にカンマを出力して、配列の中身を処理
hoge[2]に対して、最初にカンマを出力して、配列の中身を処理
hoge[3]に対して、最初にカンマを出力して、配列の中身を処理
といった流れにする、という手があります。
最初だけカンマを出力しない、という条件判断ですので、
$outputcomma = 0;
foreach($hoge as $value) {
if ($outputcomma) {
echo ",";
} else {
$outputcomma=1;
}
//ここで配列の要素に対する処理
}
といった形で、foreach を使うことができます。
あるいは、implode を使って
$result = array();
foreach($hoge as $value) {
$result[] = ほげほげ;//ここで配列の要素に対する処理
}
echo implode(",",$result);
のようにするとか。
私はこの二つの方法を適宜使い分けてます。
implode を使う方法は、「全てを連結した文字列を作る」場合にしか使えませんし、データ量が多いとメモリ消費が多くなります。それが気にならない時には implode を使うって感じ。
前者の先頭かどうか判断する方式は、文字出力以外の処理にも適用できるのがメリットです。
回答ありがとうございました。
>順番をちょっと変えて
>前者の先頭かどうか判断する方式は、文字出力以外の処理にも適用できるのがメリットです。
>foreach($hoge as $value) {
>if ($outputcomma)
発想もそうですが、こういった書き方もあるんだと、驚きましたー
No.2
- 回答日時:
質問内容のように配列の最後には何も施さないという前提ですが、
配列の個数を1引いてループさせれば良いような気がします。
for ($i = 0; $i < count($hoge) - 1; $i++) {
//配列の要素が最後じゃないのに対する処理
}
配列の最後だけ他の処理をしたいなら、
同じように配列の個数から1を引いてループさせ、
ループが終了してから最後の処理をすれば良いような気がします。
$lastkey = count($hoge) - 1;
for ($i = 0; $i < $lastkey; $i++) {
$hoge[$i] = "no".$i; // 書き換え
}
$hoge[$lastkey] = "last"; // 最後の配列の中身を書き換え
//単純に変数に配列の中身のカンマ区切りにしたいなら
$str = implode(",",$hoge);
//単純に変数に配列の中身を'中身',として最後にカンマを渡さない
$str = "'".implode("','",$hoge)."'";
回答ありがとうございました。
>質問内容のように配列の最後には何も施さないという前提ですが、
配列の個数を1引いてループさせれば良いような気がします。
そうですね…。言われてみるまで、全く気が付きませんでしたー
>//単純に変数に配列の中身を'中身',として最後にカンマを渡さない
>$str = "'".implode("','",$hoge)."'";
区切り文字を変えると、こういう書き方もできるんですね。勉強になりました
No.1
- 回答日時:
「配列の中身を処理して」が同じ動作だとしてですが。
foreach($hoge as $key => $val){
$hoge[$key] = $val; // $val を処理して配列に戻す処理
}
unset($key, $val);
$result = implode(",", $hoge); // 配列をカンマ( , )で連結した文字列にする。
こんな感じで処理しますが、いかがでしょうか?
私も、他の方の処理方法を見てみたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- 生物学 シャトルベクターの大腸菌への形質転換 1 2022/07/02 23:19
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 【プログラミング】制限なし部分和の配列の処理について 2 2022/11/22 15:24
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
$_SESSIONに二次元配列を使える...
-
$_POSTを一括してサニタイズし...
-
URLの文字列からパラメータ部分...
-
配列をループでたくさん宣言し...
-
smartyで配列の中の同数値の数...
-
file_existsでファイル名の部分...
-
PHPのカッコ[ ]の使い方について
-
一覧から選んだ動画を、順番に...
-
PHPにてクラスを配列にすること...
-
DB抽出結果を配列のままフォ...
-
unset使用時の利点
-
array_values?
-
usort のユーザー定義比較関数...
-
PHPでの簡易ビンゴゲームでの疑...
-
このwhile文(?)の意味が理解で...
-
文字列連結パターンが多数ある場合
-
配列一致(要素順番は違うが内容...
-
ファイル名を確認してそのファ...
-
GOTO命令のようなことをPHPで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
String だと「 ByRef引数の型が...
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
チェックボックス複数選択 mys...
-
配列一致(要素順番は違うが内容...
-
file_existsでファイル名の部分...
-
Smartyのテンプレートからjavas...
-
ネストが深い時のforeachはどう...
-
foreachのなかで次のキーを参照...
-
漢字のソートについて
-
PHPにてクラスを配列にすること...
-
ExcelVBAのチェックボックスに...
-
URLのサブドメインとドメイン部...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
PHPのPOSTでの半角スペース
-
PHPのループ数限界値について
-
$_POSTを一括してサニタイズし...
-
postgresql関数をつかったレコ...
-
ファイルから指定行数分だけ読...
おすすめ情報