ラボ > PHP:配列関連

PHP 配列のメモ

微妙に忘れる内容のメモ。「配列のキーだけ取得」や「値が含まれるか」、「配列の削除」など。

作成日:2018-04-26, 更新日:2019-03-22

配列のキー(添え字)を数字の添え字で振りなおす

$result = array_values($ary);

配列のキー(添え字)を取得したい

$result = array_keys($ary);

※添え字の一覧を配列にしてくれる

配列に値が含まれているかチェック

var_dump(in_array(値, $ary));

※値があれば「true」。無ければ「false」

「in_array()」は遅いらしい。

配列に値が含まれているかチェック:別案

連想配列に置き換えてから「isset()」で調査。

$ary = array(xxxx, xxxx, xxxx, xxxx, xxxx, xxxx);

$fixAry = array();
foreach ( $ary as $v ) {
  $fixAry[$v] = true;
}

if ( isset($fixAry[〇〇〇]) ) {
  // 値あり
}
else {
  // 値なし
}

配列にキーが含まれているかチェック

var_dump( array_key_exists(キー, 配列) );

NULLのチェック

if ( array_key_exists(キー, 配列) ) {
  if ( is_null(配列[キー]) ) {
    // 配列にキーはあるけど、値は「NULL」
  }
}

「array_key_exists()、is_null()」と「isset()」の比較サンプル

$tmpIpt = array(
  'a' => 1,
  'b' => 0,
  'c' => true,
  'd' => false,
  'e' => null,
);

$aryKey = array('a', 'b', 'c', 'd', 'e', 'f', );

// array_key_exists()とis_null()でチェック
foreach ( $aryKey as $rowKey ) {
  if ( array_key_exists($rowKey, $tmpIpt) ) {
    if ( is_null($tmpIpt[$rowKey]) ) {
      echo 'null';
    }
    else {
      echo 'nullではない';
    }
  }
  else {
    echo 'キーがない';
  }
}

// isset()でチェック
foreach ( $aryKey as $rowKey ) {
  if ( isset($tmpIpt[$rowKey]) ) {
    echo 'セットされている';
  }
  else {
    echo 'セットされていない';
  }
}

▼結果

チェックしたキー array_key_exists()とis_null() isset()
a nullではない セットされている
b nullではない セットされている
c nullではない セットされている
d nullではない セットされている
e null セットされていない
f キーがない セットされていない

最後の要素を削除

$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
// $stackは、「orange, banana, apple, raspberry」
// $fruitは、「raspberry」

重複データの削除

$result = array_unique($tmpAry);

重複データがあるか確認

$result = array_unique($tmpAry);
if ( count($result) == count($tmpAry) ) {
  // 重複なし
}
else {
  // 重複アリ
}