[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で探す)メニューへ戻る

 






関連記事
[PHP]ループ、繰り返し

[PHP]JavaScriptとの連携

[PHP]雑記帳

[PHP]エラー例

PHPメニュー