PHPの配列は他の言語と比べて若干癖がある。 インデックスが 型が整数か文字列とか連番でなくてもよいとかゆるいので、ある意味柔軟なデータを生成する事もできる。 (ここら辺は言語思想)
PHP配列の結合は「array_merge() 」が一般的かも知れないが、演算子でも計算できる。 ただし、インデックスによって結果が異なるので注意が必要。
の組み合わせで考察してみる。
事前に結合するサンプルデータを作成しておく(例では10個ずつ)。
function generateValues($count, $prefix = 'test', $from_index = 1)
{
for ($i = $from_index; $i <= $count + $from_index; $i++) $values[$i] = "{$prefix}{$i}";
return $values;
}
$values1 =
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
)
$values2 =
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
)
$values1 + $values2 を演算子「+」で結合してみる。
//values1 + values2
$values1 = $array_merge->generateValues(10);
$values2 = $array_merge->generateValues(10);
$values = $values1 + $values2;
$values1 + $values2 =
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
)
インデックスが同じだと結合できない。 またどちらの配列が採用されているかわからないので、値の違う配列を作成して調べる。
//values1 + values2
$values1 = $array_merge->generateValues(10, 'red');
$values2 = $array_merge->generateValues(10, 'blue');
$values = $values1 + $values2;
$values1 =
array (
0 => 'red0',
1 => 'red1',
2 => 'red2',
3 => 'red3',
4 => 'red4',
5 => 'red5',
6 => 'red6',
7 => 'red7',
8 => 'red8',
9 => 'red9',
)
$values2 =
array (
0 => 'blue0',
1 => 'blue1',
2 => 'blue2',
3 => 'blue3',
4 => 'blue4',
5 => 'blue5',
6 => 'blue6',
7 => 'blue7',
8 => 'blue8',
9 => 'blue9',
)
$values1 + $values2 =
array (
0 => 'red0',
1 => 'red1',
2 => 'red2',
3 => 'red3',
4 => 'red4',
5 => 'red5',
6 => 'red6',
7 => 'red7',
8 => 'red8',
9 => 'red9',
)
上書きされずに最初の配列が採用されていることがわかる。
同じ内容の配列を array_merge() するとインデックスが振り直された配列を返す。
$values = array_merge($values1, $values2);
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
10 => 'test0',
11 => 'test1',
12 => 'test2',
13 => 'test3',
14 => 'test4',
15 => 'test5',
16 => 'test6',
17 => 'test7',
18 => 'test8',
19 => 'test9',
)
今度は、インデックスの異なる配列で試してみる。 配列の作成は以下で作成
function generateValuesWithIndex($count, $prefix = 'test')
{
for ($i = 0; $i < $count; $i++) {
$values[$this->index++] = "{$prefix}{$i}";
}
return $values;
}
$values1 =
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
)
$values2 =
array (
20 => 'test0',
21 => 'test1',
22 => 'test2',
23 => 'test3',
24 => 'test4',
25 => 'test5',
26 => 'test6',
27 => 'test7',
28 => 'test8',
29 => 'test9',
)
$values = $values1 + $values2;
$values1 + $values2 =
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
20 => 'test0',
21 => 'test1',
22 => 'test2',
23 => 'test3',
24 => 'test4',
25 => 'test5',
26 => 'test6',
27 => 'test7',
28 => 'test8',
29 => 'test9',
)
インデックスを保持したまま結合できる。
$values = array_merge($values1, $values2);
array (
0 => 'test0',
1 => 'test1',
2 => 'test2',
3 => 'test3',
4 => 'test4',
5 => 'test5',
6 => 'test6',
7 => 'test7',
8 => 'test8',
9 => 'test9',
10 => 'test0',
11 => 'test1',
12 => 'test2',
13 => 'test3',
14 => 'test4',
15 => 'test5',
16 => 'test6',
17 => 'test7',
18 => 'test8',
19 => 'test9',
)
インデックスが振り直されて結合される。