$ary = ['黒い礼服','茶を一杯','赤い人参','橙のみかん','黄色','緑','青','紫','灰','白'];
if(in_array('赤い人参', $ary)){
echo '配列内に存在する';
}else{
echo '配列内に存在しない';
}
配列内に存在する
サンプル配列
$animals = array(
'neko'=>'ネコ',
'yagi'=>'ヤギ',
'kani'=>'カニ',
'same'=>'サメ',
);
検証1
endで末尾要素を取得したあと、currentで現在要素を取得すると末尾の要素が取得される。
$last = end($animals);
$v = current($animals);
echo $v; // → サメ
検証2
内部ポインタを末尾に移動してもeachには影響なし
$last = end($animals);
echo $last; // → サメ
foreach($animals as $key => $val){
echo $key . '→' . $val . '<br>';
}
neko→ネコ yagi→ヤギ kani→カニ same→サメ
検証3
resetを実行すると内部ポインタは先頭に戻る。
$last = end($animals);
reset($animals);
$v = current($animals);
echo $v; // → ネコ
検証4
内部ポイントを末尾に移動させたあと、nextを実行すると空が出力される。
$last = end($animals);
echo next($animals); // → 空値
$v = current($animals);
echo $v; // → 空値
検証5
内部ポインタを1つ上にずらしてみる。
$last = end($animals);
echo prev($animals); // → カニ
$v = current($animals);
echo $v; // → カニ
検証6
内部ポインタが先頭に状態でprevを実行すると空が出力される
echo prev($animals); // → 空値
$v = current($animals);
echo $v; // → 空値
$last = end($ary);
reset($ary); // 配列の内部ポインタを先頭に戻す
$ary1 = ['cat','dog','pig'];
$ary2 = ['猫','犬','豚'];
$ary3 = array_combine($ary1,$ary2);
var_dump($ary3);
出力
array (size=3) 'cat' => string '猫' (length=3) 'dog' => string '犬' (length=3) 'pig' => string '豚' (length=3)
$arr = array('neko'=>'猫',0=>'零',1=>'壱');
reset($arr); // 配列の内部ポインタを先頭に戻す。next関数やprev関数で内部ポインタを移動していないときは省略できる。
$first_key = key($arr);
var_dump($first_key); // → neko
$ary1 = array('neko','犬','ブタ','KANI');
$ary1= array_flip($ary1);
var_dump($ary1);
array (size=4) 'neko' => int 0 '犬' => int 1 'ブタ' => int 2 'KANI' => int 3
<?php
$data1 = null;
$data2 = 'cat';
$data3 = ['cat','dog'];
$data4 = [
['name'=>'cat','wamei'=>'ネコ'],
['name'=>'dog','wamei'=>'イヌ'],
];
$data5 = array();
$data6 = 0;
$d_struct_type = getDataStructureType($data1);
echo '$data1 → ' . $d_struct_type . '<br>';
$d_struct_type = getDataStructureType($data2);
echo '$data2 → ' . $d_struct_type . '<br>';
$d_struct_type = getDataStructureType($data3);
echo '$data3 → ' . $d_struct_type . '<br>';
$d_struct_type = getDataStructureType($data4);
echo '$data4 → ' . $d_struct_type . '<br>';
$d_struct_type = getDataStructureType($data5);
echo '$data5 → ' . $d_struct_type . '<br>';
$d_struct_type = getDataStructureType($data6);
echo '$data6 → ' . $d_struct_type . '<br>';
/**
* データ構造タイプを取得する。
*
* @note
* データ構造タイプは4種類(0:空 , 1:プリミティブ型 ,2:エンティティ型 , 3:データ型)
*
* @param $value
* @return int データ構造タイプ
*/
function getDataStructureType($data){
if($data === null) return 0; // 空
if(is_array($data)){
if(count($data) == 0){
return 2; // エンティティ型
}else{
$first = reset($data); // $first→猫
if(is_array($first)){
return 3; // データ型
}else{
return 2; // エンティティ型
}
}
}
return 1; // プリミティブ型
}
?>
出力
$data1 → 0 $data2 → 1 $data3 → 2 $data4 → 3 $data5 → 2 $data6 → 1
サンプル
$data['neko'][1]['mike'] = 'sallcat';
$data[0] = 1;
$data['animal'][1] = 'bigcat';
$data['animal'][2]['konchu'][2] = 'kuro-ari';
$data['fish']='fish';
$depth = arrayDepth($data);
echo "depth={$depth}<br>";
$depth2 = arrayDepthSmp($data);
echo "depth2={$depth2}<br>";
/**
* 配列の階層の深さを調べる
*
* @note
* 配列すべてをサーチするので処理は重め
*
* @param array $ary 対象配列
* @param number $depth 深度(再起呼び出しで使用するので省略すること)
* @return number 階層数
*/
function arrayDepth(&$ary, $depth=0){
if(is_array($ary)){
$depth++;
$max_depth = 0;
foreach($ary as $value){
$dep = arrayDepth($value, $depth);
if($dep > $max_depth) $max_depth = $dep;
}
return $max_depth;
}else{
return $depth;
}
}
/**
* 配列の階層の深さを調べる(高速版)
*
* @note
* 配列の先頭からのみ深度を調べる。
* 処理は速いが、階層にばらつきのある配列には向かない。
* 行列データなどに。
*
* @param array $ary 対象配列
* @param number $depth 深度(再起呼び出しで使用するので省略すること)
* @return number 階層数
*/
function arrayDepthSmp(&$ary, $depth=0){
if(is_array($ary)){
$depth++;
$first_key = key($ary);
$depth = arrayDepthSmp($ary[$first_key], $depth);
}
return $depth;
}
出力
depth=4 depth2=3
$ary = array();
$ary[0] = 'dog';
$ary['animal'] = 'cat';
$first = current($ary);
var_dump($first); // → dog
空配列の場合
$ary = array();
$first = current($ary);
var_dump($first); // → false
<?php
$list = [
'yakusima' => 'ヤクシマタゴガエル',
'tokyo' => 'トウキョウダルマガエル',
'chousen' => 'チョウセンヤマアカガエル',
'tusima' => 'ツシマアカガエル',
'test1' => '\'',
'test2' => '&',
'test3' => '"',
'test4' => '$',
'test5' => '\',
'tonosama' => 'トノサマガエル',
'ryokyu' => 'リュウキュウアカガエル',
];
echo "<pre class='console'>";
$key = array_search('ツシマアカガエル', $list);
echo $key . '<br>';
$key = array_search('ニョロボン', $list);
echo $key . '<br>';
$key = array_search('\'', $list);
echo $key . '<br>';
$key = array_search('&', $list);
echo $key . '<br>';
$key = array_search('"', $list);
echo $key . '<br>';
$key = array_search('$', $list);
echo $key . '<br>';
$key = array_search('\', $list);
echo $key . '<br>';
echo "</pre>";
?>
出力
tusima
test1
test2
test3
test4
test5