KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > PHP Array関数いろいろ

PHP Array関数いろいろ

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

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

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

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

PHPの場合は

PHP
  1.  <?php
  2.  $a = array("a", "b", "c");
  3.  echo end($a);
  4.  ?>

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

PHP
  1.  <?php
  2.  $a = array("a", "b", "c");
  3.  echo $a[count($a) - 1];
  4.  ?>

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

参照サイト

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

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

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

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

$case
CASE_UPPER or CASE_LOWER (デフォルト)
PHP
  1.  <?php
  2.  $a = array("Zero" => 0, "One" => 1, "two" => 2);
  3.  
  4.  var_dump(array_change_key_case($a));
  5.  
  6.  echo "<hr />";
  7.  
  8.  var_dump(array_change_key_case($a, CASE_UPPER));
  9.  
  10.  echo "<hr />";
  11.  
  12.  $b = array("test" => "php", "Test" => "Php", "TEST" => "PHP");
  13.  
  14.  var_dump(array_change_key_case($b));
  15.  ?>

実行結果

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を保持する。

サンプルのまんま。

PHP
  1.  <?php
  2.  $a = array("a", "b", "c", "d", "e");
  3.  $b = array("Zero" => 0, "One" => 1, "two" => 2, "three" => 3, "four" => 4);
  4.  
  5.  var_dump(array_chunk($a, 2));
  6.  echo "<hr />";
  7.  var_dump(array_chunk($a, 2, true));
  8.  echo "<hr />";
  9.  var_dump(array_chunk($b, 2));
  10.  echo "<hr />";
  11.  var_dump(array_chunk($b, 2, true));
  12.  ?>

実行結果

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の要素数は同じでなければならない。

PHP
  1.  <?php
  2.  /* サンプル */
  3.  $a = array("green", "red", "yellow");
  4.  $b = array("avocado", "apple", "banana");
  5.  $c = array_combine($a, $b);
  6.  print_r($c);
  7.  
  8.  echo "<hr />";
  9.  
  10.  /* Stringと配列 */
  11.  $a = array("green", "red", "yellow");
  12.  $b = array($a, $a, $a);
  13.  $c = array_combine($a, $b);
  14.  print_r($c);
  15.  
  16.  echo "<hr />";
  17.  
  18.  /* 配列とString */
  19.  $a = array("green", "red", "yellow");
  20.  
  21.  $a = array($a, $a, $a);
  22.  $b = array("avocado", "apple", "banana");
  23.  $c = array_combine($a, $b);
  24.  print_r($c);
  25.  
  26.  echo "<hr />";
  27.  
  28.  /* 配列と配列 */
  29.  $a = array("green", "red", "yellow");
  30.  $b = array("avocado", "apple", "banana");
  31.  
  32.  $a = array($a, $a, $a);
  33.  $b = array($b, $b, $b);
  34.  
  35.  $c = array_combine($a, $b);
  36.  print_r($c);
  37.  ?>

実行結果

    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となる。

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

PHP
  1.  <?php
  2.  $a = array("green", "red", "yellow");
  3.  $b = array("avocado", "apple", "banana");
  4.  $c;
  5.  
  6.  if (count($a) == count($b)) {
  7.   for ($i=0; $i<count($a); $i++) {
  8.   $c[$a[i]] = $b[$i];
  9.   }
  10.   return $c;
  11.  } else {
  12.   $c = false;
  13.  }
  14.  ?>

array_count_values ( array $input )

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

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

PHP
  1.  <?php
  2.  $a = array(1, "hello", 1, "world", "hello");
  3.  print_r(array_count_values($a));
  4.  
  5.  echo "<hr />";
  6.  
  7.  $b = array("Zero" => 0, "One" => 0, "two" => "test", "three" => "test", "four" => "hoge");
  8.  print_r(array_count_values($b));
  9.  ?>

実行結果

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

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

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

まだまだ先は長い・・・

初めてのPerl
作者:トム フェニックス | 価格:¥ 3,780

トラックバック(0)

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。

2012
01.21

[PHP]共有サーバーユーザーのためのPEARインストール方法

共有サーバーでは自由にPEARのパッケージがインストールできないので、 プロジェクトローカルに設置することになりますが、以前httpベースのものを使ってみたんですけど、 やたら重くて使い物にならなかったので、僕は普通にFTPでアップするようにしてます。

ってことでプロジェクトローカルへのPEARのインストール方法。