2009年04月17日 22:21

PHP Array関数いろいろ

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/456

PHPには配列を操作する関数がたくさんあるのでちょっとずつ試していこうかとおもいます。

はじめてのperlを読んでて perlでは配列の最後を取り出すのに


@rray = (a b c);
print @rray[-1];

とすればいいらしい。 PHPでもできるかなと思ったけどできなかった。

PHPの場合は


$a = array("a", "b", "c");
echo end($a);

となる。つい最近までend()使ってなかったですね。 ずっと


$a = array("a", "b", "c");
echo $a[count($a) - 1];

という風にやってました。恥ずかしい。

参照サイト

8割使ったことない感じ。実は便利な関数あるかもなのでちょっとずつ試していきます。

array_change_key_case ( array $input [, int $case= CASE_LOWER ] )

$input のすべてのキーを小文字あるいは大文字にした配列を返します。 数値添字はそのままとなります。

ハッシュに対して利用する。

$case
CASE_UPPER or CASE_LOWER (デフォルト)

$a = array("Zero" => 0, "One" => 1, "two" => 2);

var_dump(array_change_key_case($a));

echo "<hr />";

var_dump(array_change_key_case($a, CASE_UPPER));

echo "<hr />";

$b = array("test" => "php", "Test" => "Php", "TEST" => "PHP");

var_dump(array_change_key_case($b));

実行結果

array(3) { ["zero"]=> int(0) ["one"]=> int(1) ["two"]=> int(2) }
array(3) { ["ZERO"]=> int(0) ["ONE"]=> int(1) ["TWO"]=> int(2) }
array(1) { ["test"]=> string(3) "PHP" }

処理の結果keyが同じものはより後ろの値が上書きされる。 んーこれはあまり使いそうもなさそう。

array_chunk ( array $input , int $size [, bool $preserve_keys= false ] )

配列を、size 個ずつの要素に分割します。 最後の部分の要素数は size より小さくなることもあります。

$preserve_keys Boolean
trueが指定されるとキー/indexを保持する。

サンプルのまんま。


$a = array("a", "b", "c", "d", "e");
$b = array("Zero" => 0, "One" => 1, "two" => 2, "three" => 3, "four" => 4);

var_dump(array_chunk($a, 2));
echo "<hr />";
var_dump(array_chunk($a, 2, true));
echo "<hr />";
var_dump(array_chunk($b, 2));
echo "<hr />";
var_dump(array_chunk($b, 2, true));

実行結果

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
        )

)

Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [2] => c [3] => d ) [2] => Array ( [4] => e ) )
Array ( [0] => Array ( [0] => 0 [1] => 1 ) [1] => Array ( [0] => 2 [1] => 3 ) [2] => Array ( [0] => 4 ) )
Array ( [0] => Array ( [Zero] => 0 [One] => 1 ) [1] => Array ( [two] => 2 [three] => 3 ) [2] => Array ( [four] => 4 ) )

ハッシュの場合、trueを指定しないとkeyが失われる。 これもうまい使いどころが思い浮かばない。tableとかHTMLと絡ませて出力する時、使えるかも?

array_combine ( array $keys , array $values )

keys 配列の値をキーとして、また values 配列の値を対応する値として生成した配列を作成します。

$keysと$valuesの要素数は同じでなければならない。


/* サンプル */
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$c = array_combine($a, $b);
print_r($c);

echo "<hr />";

/* Stringと配列 */
$a = array("green", "red", "yellow");
$b = array($a, $a, $a);
$c = array_combine($a, $b);
print_r($c);

echo "<hr />";

/* 配列とString */
$a = array("green", "red", "yellow");

$a = array($a, $a, $a);
$b = array("avocado", "apple", "banana");
$c = array_combine($a, $b);
print_r($c);

echo "<hr />";

/* 配列と配列 */
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");

$a = array($a, $a, $a);
$b = array($b, $b, $b);

$c = array_combine($a, $b);
print_r($c);

実行結果

Array
(
    [green] => avocado
    [red] => apple
    [yellow] => banana
)

Array ( [green] => Array ( [0] => green [1] => red [2] => yellow ) [red] => Array ( [0] => green [1] => red [2] => yellow ) [yellow] => Array ( [0] => green [1] => red [2] => yellow ) )
Array ( [Array] => banana )
Array ( [Array] => Array ( [0] => avocado [1] => apple [2] => banana ) )

$keyの要素がArrayの場合、添字はArrayとなる。

下記のようなコードは書いたことある気がする。 これは使うことあるかも。


$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$c;

if (count($a) == count($b)) {
    for ($i=0; $i<count($a); $i++) {
		$c[$a[i]] = $b[$i];
	}
	return $c;
} else {
    $c = false;
}

array_count_values ( array $input )

配列 input の値をキーとし、 input におけるその値の出現回数を値とした配列を返します。

string あるいは integer 以外の型の要素が登場するたびに E_WARNING が発生します。


$a = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($a));

echo "<hr />";

$b = array("Zero" => 0, "One" => 0, "two" => "test", "three" => "test", "four" => "hoge");
print_r(array_count_values($b));

実行結果

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)

Array ( [0] => 2 [test] => 2 [hoge] => 1 )

値に対しての処理なのでハッシュでもOK。 これは重複チェックに使えるのか。

まだまだ先は長い・・・

初めてのPerl

著者 : ランダル・L. シュワルツ / 金額 : ¥ 3,780

PHP×携帯サイト デベロッパーズバイブル

著者 : 荒木 稔 / 金額 : ¥ 2,940

PHP Array関数いろいろタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/456
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ