がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

配列の謎………ええ?

毎度おなじみで恐縮なのですが。………PHPの配列の設計思想が掴みきれません。
まぁ何はともあれ。こちらをご覧くださいな。

// この配列は以下の配列と同じです ...
array(5 => 43, 32, 56, "b" => 12);

// この配列は上の配列と同じです
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);

んっと………まぁすごいですねぇな感じなのですが。
んじゃぁってんでちょっといじりますと。

$a = array("a" => 43, 32, 56, "X" => 12);
print_r($a);

Array
(
    [a] => 43
    [0] => 32
    [1] => 56
    [X] => 12
)

となります。………理解はできますがもう一つ納得しにくいです。


んで。配列を足しこむのに、通常関数があるだろうと思って調べますと。
いやまぁちゃんとあるのですが。

例 2. 簡単なarray_merge()の例

<?php
$array1 = array();
$array2 = array(1 =>; "data");
$result = array_merge($array1, $array2);
?>

数値添字が振りなおされることに注意!

Array
(
   [0] => data
)

配列を完全に維持し、単に追加だけしたい場合には、+ 演算子を使用してください:

<?php
$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;
?>;

数値添字は維持され、関連が保持されます。

Array
(
   [1] => data
) 

………なにやら「+演算子推奨」に見えます。
では。単純な二つの配列を足してみましょう。

$a = array(1,2,3) + array(4,5,6);
print_r($a);

結果は予想通り。

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

ちなみに。

$a = array(4,5,6) + array(1,2,3);
print_r($a);

ですと

Array
(
    [0] => 4
    [1] => 5
    [2] => 6
)

になるのも予想通り。


………えと。「PHPにおいてすべてはハッシュ配列である」事を知っていれば、理解はできるのですが。
納得できるかどうかはまた違う問題ですねぇええ。


ちなみに。近しい問題で「文字列として"50"とかをメソッドの引数で渡すとわたり先では数値として認識してくれる」なんてぇ状況もあります。
したがって。いわゆる、iterator的な使い方をしたくて。

文字列への文字単位のアクセスと修正
$str[42] のように、 角括弧を使用してゼロから始まるオフセットを指定すると、 文字列内の任意の文字にアクセスし、修正することが可能です。 つまり、文字列を文字の配列として考えるわけです。 波括弧の後に任意の文字をゼロから始まるオフセットで指定することにより、 文字列内の文字にアクセス/修正することが可能です。

なんてぇ記述を信じてロジックを書くと、時々痛い目にあいます。
…ぶっちゃけ「stringクラス」作る予定ですええ。


よく「PHPは楽に適当に書けるからいいんだ」とか耳にしますが。
………本当に、その方々って業務でご利用になられてるんでしょうか? ストレートに疑問です。