公式ドキュメント

phpマニュアル

探しやすい

配列から値で探す

通常の配列の場合

  
    $array = array('apple','grape','pine');
    $key = array_search( 'pine', $array);

    print_r($key);
    //2
  
  

多次元配列の場合

  
    $array = [
    	['apple','300'],
    	['grape','400'],
    	['pine','500']
    ];

    $key = array_search( 'pine', array_column( $array, 0));

    print_r($key);
    //2  
  

多次元連想配列の場合

  
    $array = [
    	['name' => 'apple', 'value' => '300'],
    	['name' => 'grape', 'value' => '400'],
    	['name' => 'pine', 'value' => '500']
    ];

    $key = array_search( 'pine', array_column( $array, 'name'));

    print_r($key);
    //2
    
  

//array_column:検索用配列を作る

  
    //php5.5以下では、array_columnが使えないので関数実装
      /**
       * 指定したキーの値を取得する。2次元配列のみ対応
       * @param target_data 値を取り出したい多次元配列
       * @param column_key  値を返したいカラム
       * @param index_key   返す配列のインデックスとして使うカラム
       * return array       入力配列の単一のカラムを表す値の配列を返し
       */
      function array_column ($target_data, $column_key, $index_key = null) {

          if (is_array($target_data) === FALSE || count($target_data) === 0) return FALSE;

          $result = array();
          foreach ($target_data as $array) {
              if (array_key_exists($column_key, $array) === FALSE) continue;
              if (is_null($index_key) === FALSE && array_key_exists($index_key, $array) === TRUE) {
                  $result[$array[$index_key]] = $array[$column_key];
                  continue;
              }
              $result[] = $array[$column_key];
          }

          if (count($result) === 0) return FALSE;
          return $result;

    }

  
  

配列から値の存在を確認

通常の配列の場合


  $array = array('apple','grape','pine');

  if(in_array( 'apple', $array)){
  	echo 'appleとう値を持つデータは存在する';
  }else{
  	echo 'appleとう値を持つデータは存在しない';
  }


多次元配列の場合


  $array = [
  	['apple','300'],
  	['grape','400'],
  	['pine','500']
  ];

  if(in_array( 'apple', array_column( $array, 0))){
  	echo 'appleとう値を持つデータは存在する';
  }else{
  	echo 'appleとう値を持つデータは存在しない';
  }
  

多次元連想配列の場合


  $array = [
  	['name' => 'apple', 'value' => '300'],
  	['name' => 'grape', 'value' => '400'],
  	['name' => 'pine', 'value' => '500']
  ];

  if(in_array( 'apple', array_column( $array, 'name'))){
  	echo 'appleとう値を持つデータは存在する';
  }else{
  	echo 'appleとう値を持つデータは存在しない';
  }
  

配列からKeyの存在を確認

通常の連想配列の場合


  $ary = [
      'a' => 1,
      'b' => 2,
      'c' => 3
  ];

  if (array_key_exists('a', $ary)) {
      echo $ary['a'];
  }

  if (array_key_exists('d', $ary)) {
      echo $ary['d'];
  }


通常の連想配列で複数のKEYの場合


//配列を定義
$fruits =
        [
          'apple'=>'100円',
          'orange'=>'80円',
          'banana'=>'150円',
          'pineapple'=>'300円',
          'mango'=>'200円'
        ];

//検索するキー
$fruits_key1 = 'orange';
$fruits_key2 = 'mango';

//array_key_existsで配列のキーを検索する
if (array_key_exists($fruits_key1, $fruits) and
    array_key_exists($fruits_key2, $fruits)){
  echo $fruits_key1.'と'.$fruits_key2.'は存在します';
}else{
  echo $fruits_key1.'は存在しません';
}

yesyes

多次元連想配列で複数のKEYの場合


function multiKeyExists($arr, $key) {
    // is in base array?
    if (array_key_exists($key, $arr)) {
        return true;
    }
    // check arrays contained in this array
    foreach ($arr as $element) {
        if (is_array($element)) {
            if (multiKeyExists($element, $key)) {
                return true;
            }
        }

    }
    return false;
}


**
 * キー存在チェック (複数キーワードで多次元配列)
 */
function array_multi_key_exists_recursive($needles, $haystack)
{
    foreach ($needles as $needle) {
        if (array_key_exists_recursive($needle, $haystack)) {
            return true;
        }
    }

    return false;
}

/**
 * キー存在チェック (単一キーワードで多次元配列)
 */
function array_key_exists_recursive($needle, $haystack)
{
    if (array_key_exists($needle, $haystack)) {
        return true;
    }

    // 配列があれば、その中身を再帰的に走査
    foreach ($haystack as $child) {
        if (is_array($child)
            && array_key_exists_recursive($needle, $child)
        ) {
            return true;
        }
    }

    return false;
}

$colors = [
    'blue' => 'aaa',
    'red'  => 'bbb',
    'green' => [
        'whiteblue' => 'a1',
        'blue'      => 'a2',
        'blackblue' => [
            'verywhiteblue' => 'q1',
            'blue'          => 'q2',
            'veryblackblue' => 'q3',
            'red'           => 'q4',
        ],
    ],
];
$needle = array('blue', 'red');
array_multi_key_exists_recursive($needle, $colors);


//smarty変数$arrOrderを使う
$paymentlist = $this->_tpl_vars['arrOrder'];
//確認用出力
var_dump($paymentlist);

//配列$arrOrderから検索用配列を作る(php5.5以前はそのまんまでは使えんので注意)
$list_namess = array_column($paymentlist, 'order_name02', 'order_name01');
//確認用出力
print_r($list_namess);

//配列に一致するKEY:値があるかどうか
$key = array_search($val, $array);

※ぶっちゃげ同姓同名はアウトなんだよね・・・。でもcustmaerIDだと再登録された場合とか危ういからさ。
※名前 + メールの方が確実だけど、めんどくさいからやんない。

if($_SESSION[customer][name01] == array_search($_SESSION[customer][name02], $list_namess)){

あなたは支払いをすませてます

} else {

あなたは未払いです。

}?
多次元連想配列のフィルター

  function extractWoman($element) {
    return $element['sex'] == 'woman';
  }

  $array = [
    [
      'name' => 'Keita',
      'sex' => 'man',
      'birth_month' => 11,
    ],
    [
      'name' => 'Miho',
      'sex' => 'woman',
      'birth_month' => 13,
    ],
    [
      'name' => 'Yuri',
      'sex' => 'woman',
      'birth_month' => 11,
    ],
  ];

  $result = array_filter($array, "extractWoman");


  // 金額情報をもつ連想配列を定義する
$prices = [
    'priceA' => 100,
    'priceB' => 200,
    'priceC' => 300,
    'priceD' => 400,
    'priceE' => 500,
];

// 300円以上の値を取得する
$result = array_filter($prices, function($price) {
    return $price >= 300;
});




ホゲ