[PHP]配列
トップページへ
公式の配列
サンプル
一番単純な数値添え字の場合 左から[0][1]…
$array = array("foo", "bar", "hello", "world");
別の例
$data[] = array('飲食店', 5); $data[] = array('会社', 10); print_r($data[0][0]); echo '<br>'; print_r($data[0][1]); echo '<br>'; print_r($data[1][0]); echo '<br>'; print_r($data[1][1]);
を実行すると
飲食店
5
会社
10
となります
配列に特定の値で埋める。例えば、配列をゼロで埋めてゼロ初期化
array_fill 公式
eg. 0始まりの配列で、要素数6個にゼロ埋めをする。
$go_ary = array_fill(0, 6, 0);
戻り値はもちろんarray
配列を分ける
サンプル
$data[] = array(‘事業所’, 3);
$data[] = array(‘一般住宅’, 8);
2種類の値をセット(名称と件数)した配列$dataを用意。
その配列を個別に利用したい場合、名称を配列 $place、件数を配列 $kensuuに分ける場合のサンプルです。方法1でも方法2でも結果は同じです。
方法1
foreach ($data as $key => $row) { $place[$key] = $row[0]; $kensuu[$key] = $row[1]; }
方法2
$place = array_column($data, 0); $kensuu = array_column($data, 1);
CSVファイル
CSVファイルを読み込み配列にセットし、そのまま表示するサンプルコードですが、ベースはSplFileObjectのfgetcsvの公式サンプルをそのまま引用させて頂いたものです。
概要
1.CSVファイルを1行ずつ読み込み
2.カンマごとに区切られた項目を変数にセット
3.変数を一つのグループにまとめるため、配列にセット
4.画面に表示
サンプルコード(hairetsu-test.php)
同じディレクトリに「hairetsu-sample.csv」を用意しています。
<?php // ファイルを変数に格納 $filename = "./hairetsu-sample.csv"; $file = new SplFileObject($filename); $file->setFlags(SplFileObject::READ_CSV); foreach ($file as $row) { list($kitai, $ability, $hitpoint, $attack) = $row; $array1 = array("kitai" => $kitai, "ability" => $ability); $array2 = array("hitpoint" => $hitpoint, "attack" => $attack); $array = array_merge($array1, $array2); printf("%s 能力:%s HP:%s アタック:%s", $kitai, $ability, number_format($hitpoint), number_format($attack)); printf("<br>"); } unset($row); ?>
ループ制御 foreach(公式)でCSVファイルを1行ずつ読み込み
関数 list(公式)でCSVファイル内のカンマごとに区切られた項目を、配列のように一度に各変数にセット
関数 array(公式)で配列を生成します。インデックス => 値という形式です。
(参考)関数array_mergeは複数の配列をつなぐことのできる関数(公式)です。項目が増えた時に使えると思ったので、採用しました。
printf(公式)で画面に表示します。
number_format(公式)で千の位にカンマを入れました。
unset(公式)でforeachで使用した変数 rowへの参照を解除しました。
なお「hairetsu-sample.csv」の中身は
ガンキャノン,狙撃,1700,1500 ガンダム,反撃,1600,2000 ガンタンク,鉄壁,2300,1400
で、実行すると
ガンキャノン 能力:狙撃 HP:1,700 アタック:1,500 ガンダム 能力:反撃 HP:1,600 アタック:2,000 ガンタンク 能力:鉄壁 HP:2,300 アタック:1,400
となります。
Q.配列の要素数(数)が知りたい
A. count
添え字は0(ゼロ)始まり
サンプル
for($i = 0, $size = count($people); $i < $size; ++$i) {
*countを1回だけ実行し$sizeにセットするので、最適化される
Q.多次元配列の要素数(数)を知りたい
A. COUNT_RECURSIVE オプションを追記する。
eg. count( $out, COUNT_RECURSIVE )
Q.配列の最後の要素の値を知りたい。そしてその値を変えたい
A. 配列$data でcountを使った場合ですが、他にも方法はあると思います。
//最後の要素の値 print_r($data[count($data)-1]); //その値を変える $data[count($data)-1] = array('abc', 1000);
Q.配列の中での最大値が知りたい
A. max
Q.配列の中身が見たい
A.
簡易:var_export, print_r
詳細:var_dump
正しい使い方
var_dump($records[1]);
print_r($records);
エラー「Notice: Array to string conversion」となる例 print($records[0]);
Q.listを使わない方法は?
A.listは項目名がわかりやすくメンテしやすいメリットがあるものの、項目の数が多い場合には煩雑に見える可能性があり、そういう場合は「listよりも配列の要素を直接使う方」が楽な場合もあります。
「listを使う場合」 foreach ($file2 as $value2) { list($clus_day, $jichi_cd, $jichi_mei, $place, $hosoku, $cl_no1, $cl_no2) = $value2; if (date('Y/n/j', strtotime($clus_day)) >= date('Y/n/j', strtotime('-2 day'))){ $cluster_new .= $clus_day.' '.$jichi_mei.'<BR>'."\n";} } 「listを使わない場合」 foreach ($file2 as $value2) { if (date('Y/n/j', strtotime($value2[0])) >= date('Y/n/j', strtotime('-2 day'))){ $cluster_new .= $value2[0].' '.$value2[2].'<BR>'."\n";} }
→PHP(楽天市場で探す ・ amazonで探す)メニューへ戻る