ページ

2014年6月1日日曜日

PHPのよく使うarray関数をまとめる

最近PHPを使うのですがよくのでarray系の関数をまとめました。(今更間丸出しw


配列の切り出し.
$arr = array(1, 2, 3, 4, 5, 6);
$arr2 = array_slice($arr, 0, 3);
var_dump($arr2);
/** 結果 */
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}


配列のマージ.
$arr1 = array(1, 2, 3, 7, 9);
$arr2 = array(4, 8);
$arr3 = array(5);
$arr4 = array_marge($arr1, $arr2, $arr3);
var_dump($arr4);
/** 結果 */
array(8) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(7)
  [4]=>
  int(9)
  [5]=>
  int(4)
  [6]=>
  int(8)
  [7]=>
  int(5)
}


配列からキーの一覧を取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$keys = array_keys($arr);
var_dump($keys);
/** 結果 */
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}


配列から値のみを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$vals = array_values($arr);
var_dump($vals);
/** 結果 */
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}


特定文字の配列を自動生成する
$a = array_fill(1, 5, '?');
var_dump($a);
/** 結果 */
array(5) {
  [1]=>
  string(1) "?"
  [2]=>
  string(1) "?"
  [3]=>
  string(1) "?"
  [4]=>
  string(1) "?"
  [5]=>
  string(1) "?"
}


配列から重複したデータを削除します.
$a = array("a" => 1, "b" => 2, "c" => 3, "d" => 4, "d" => 5, "a" => 9);
$vals = array_unique($a);
var_dump($vals);
/** 結果 */
array(4) {
  ["a"]=>
  int(9)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
  ["d"]=>
  int(5)
}


配列から最初のキーを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$key = key(array_slice($arr, 0, 1));
var_dump($key);
/** 結果 */
string(1) "a"

配列から最後のキーを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$key = key(array_slice($arr, count($arr) - 1, 1));
var_dump($key);
/** 結果 */
string(1) "c"


array系を応用した関数

/**
 * PDOを利用したINSERTクエリーの発行.
 * @param object $dbh PDOの接続クラス.
 * @param string $table テーブル名.
 * @param array $values カラムと値の連想配列
 * @return integer 成功の場合は1失敗の場合は-1を返します.
 */
function insertQuery($dbh, $table, $values) {
    $sql = "INSERT INTO " . $table . "(" . join(", ",  array_keys($values)) . ") VALUES(" . join(", " ,array_rale("?", count($values))) . " )";
    $stmt = $dbh->prepare($sql);
    if (!$stmt->execute(array_values($values))) {
        print_r($dbh->errorInfo());
        return -1;
    }
    return 1;
}

このような応用ができます。
ほかにもあれば今後公開してみます。