公式ドキュメント
配列から値で探す
通常の配列の場合
$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;
});
ホゲ