RubyとPHP(仮) 基本的な違い(4)
2008年07月28日(月)09:00|天方
天方です。RubyとPHPの基本的な違い第四弾です。
配列
今回はRubyとPHPの配列の代表的な操作方法について簡単に表にまとめてみました。
| Ruby | PHP | |
|---|---|---|
| 初期化 | a = [] | $a = array(); |
| 初期化(初期値あり) | a = [1, 2, 3] | $a = array(1, 2, 3); |
| 配列の初期化(空の配列への代入) | a = [] a[0] = 10 | $a[0] = 10; |
| 値の取得 | a = ["hello", 39, nil] a[0] → “hello” a[1] → 39 a[2] → nil | $a = array(“hello”, 39, null); $a[0] → “hello” $a[1] → 39 $a[2] → null |
| 末尾要素の取得・削除 | element = a.pop | $element = array_pop($a); |
| 要素数 | a.size かa.length | count($a) |
| 末尾への要素の追加 | a.push(element) | array_push($a, $element); か$a[] = $element; |
| 先頭の要素の取得・削除 | element = a.shift | $element = array_shift($a); |
| 先頭への要素の追加 | a.unshift(element) | array_unshift($a, $element); |
| 要素の削除(要素を詰める) | a = [1, 2, 3] a.delete_at(1); a[0] → 1 a[1] → 3 a[2] → nil | $a = array(1, 2, 3); array_splice($a, 1, 1); $a[0] → 1 $a[1] → 3 $a[2] → null |
| 要素の削除(要素を詰めない) | a = [1, 2, 3] a[1] = nil a[0] → 1 a[1] → 3 a[2] → nil | $a = array(1, 2, 3); $a[1] = null $a[0] → 1 $a[1] → null $a[2] → 3 |
| 要素の削除(添え字を変えずに、要素を詰める) | - | $a = array(1, 2, 3); unset($a[1]); $a[0] → 1 $a[1] → null $a[2] → 3 |
当然ですが、RubyでもPHPでもほぼ同じ操作ができますが、それぞれオブジェクト指向なインタフェース、手続き型指向なインタフェースとなっていることがわかります。
最も大きな違いは実装ではないかと思います。PHPのarrayは、基本的にハッシュで
$a = array(1, 2, 3); unset($a[1]); echo var_export($a, true);
というプログラムを実行すると
array ( 0 => 1, 2 => 3, )
と出力され、配列の添え字が1の要素が削除されていることがわかります。
これはphpで配列の添え字が連続していると思うと思わぬ事態を招くことを意味しています。
$a = array(1, 2, 3);
unset($a[1]);
for ($i = 1 ; $i < count($a); $i++) {
echo "[" . $i . ":" . $a[$i] . "]";
}
このようにした場合
[0:1][1:]
と表示されます。(countでの配列サイズは2となるため)
この点を意識していればどちらでも問題なくつかえるのではないかと思います。