🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

1440閲覧

PHP 連想配列をarray_sliceする際にkeyを整数ではなく文字にしたい

aosachi0520

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/01 02:26

PHPで
連想配列をarray_sliceする際に
keyが文字ではなく整数になってしまいます。
keyをそのまま文字を維持してほしいのですが
どうすればよろしいでしょうか?

ご教授お願い致します。

php

1 2echo '$_POST<br>'; 3var_dump($_POST); 4 5echo '$array_slice_data<br>'; 6$array_slice_data = array_slice($_POST, 0, 6, true); 7var_dump($array_slice_data);

結果 以下のようになってしまいます。

html

1$_POST 2array(7) { ["takashi"]=> string(1) "0" ["sinji"]=> string(1) "0" ["masasi"]=> string(1) "0" ["tadasi"]=> string(1) "2" ["kiyosi"]=> string(1) "2" ["mokomichi"]=> string(1) "2" ["mode"]=> string(6) "update" } 3 4$array_slice_data 5array(6) { [0]=> string(1) "0" [1]=> string(1) "0" [2]=> string(1) "0" [3]=> string(1) "2" [4]=> string(1) "2" [5]=> string(1) "2" }

理想は以下です。

php

1var_dump($array_slice_data);

html

1$array_slice_data 2array(6) { ["takashi"]=> string(1) "0" ["sinji"]=> string(1) "0" ["masasi"]=> string(1) "0" ["tadasi"]=> string(1) "2" ["kiyosi"]=> string(1) "2" ["mokomichi"]=> string(1) "2" }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/01 02:42

var_export()で出力すると、再利用できないフォーマットで出力するvar_dump()よりもわかりやすい、こともある。
guest

回答2

0

modeを消したいだけなら。

php

1<?php 2 3$arr = [ 4 "takashi" => "0", 5 "sinji" => "0", 6 "masasi" => "0", 7 "tadasi" => "2", 8 "kiyosi" => "2", 9 "mokomichi" => "2", 10 "mode" => "update" 11]; 12 13var_export($arr); 14unset($arr["mode"]); // <--- unset() を使えばいいじゃない 15var_export($arr);

array (
'takashi' => '0',
'sinji' => '0',
'masasi' => '0',
'tadasi' => '2',
'kiyosi' => '2',
'mokomichi' => '2',
'mode' => 'update',
)array (
'takashi' => '0',
'sinji' => '0',
'masasi' => '0',
'tadasi' => '2',
'kiyosi' => '2',
'mokomichi' => '2',
)


ところで、$_POSTを受信しての編集をするというのは感心しません。
不定のkeyを全部扱うつもりですか?

$_GETや$_POSTはフォーム送信されたデータが納まる変数ですが、
フォームを改ざんするなどして任意のでたらめなデータが送られている可能性を秘めているため、
でたらめなデータも含めて余計なデータを消したい、みたいなことは困難になります。

ですので、通常は欲しいデータだけ$_GETや$_POSTから拾う形になります。

例えばですが、HTMLで

html

1<input type="hidden" name="target_name[]" value="takasi">takasiさんの入力 2<select name="target_data[]"> 3 <option value="0">0</option> 4 <option value="1">1</option> 5 <option value="2">2</option> 6</select>

みたいな要素の繰り返しフォームであれば、
$_POST['target_name'][0], $_POST['target_name'][1], ・・・
$_POST['target_data'][0], $_POST['target_data'][1], ・・・
にアクセスすることでほしいデータを得られます。
わかっているkeyでアクセスできるこっちのほうが、マシです。

$_POSTを加工することをやめて、
そもそものフォームを工夫しませんか。

投稿2021/03/01 02:52

編集2021/03/01 05:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

提示のコードで、意図した挙動が得られるはずだけどなぁ。。。
paiza.io で試してみました。

php

1<?php 2$_POST =[ 3 "takashi" => "0", 4 "sinji" => "0", 5 "masasi" => "0", 6 "tadasi" => "2", 7 "kiyosi" => "2", 8 "mokomichi" => "2", 9 "mode" => "update", 10 ]; 11 12echo '$_POST<br>'; 13var_dump($_POST); 14 15echo '$array_slice_data<br>'; 16$array_slice_data = array_slice($_POST, 0, 6, true); 17var_dump($array_slice_data);
$_POST<br>array(7) { ["takashi"]=> string(1) "0" ["sinji"]=> string(1) "0" ["masasi"]=> string(1) "0" ["tadasi"]=> string(1) "2" ["kiyosi"]=> string(1) "2" ["mokomichi"]=> string(1) "2" ["mode"]=> string(6) "update" } $array_slice_data<br>array(6) { ["takashi"]=> string(1) "0" ["sinji"]=> string(1) "0" ["masasi"]=> string(1) "0" ["tadasi"]=> string(1) "2" ["kiyosi"]=> string(1) "2" ["mokomichi"]=> string(1) "2" }

$_POST が特殊な挙動をしている可能性もありますが、POST 投稿を試す環境が無いのでそちらは試してないです。

余談)
実装として、順番が保証されていないものを slice するのはまずい気がします。

投稿2021/03/01 02:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/01 03:01

「実装として、順番が保証されていないものを slice するのはまずい」は同意。 たまたまその序列で受信したデータを序列ベースで加工しちゃうのは危険。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問