php in_array() extension
You can use function inArray below, to search: | |
- multidimensional arrays | |
- for substrings (case [in]sensitive) | |
- for sub-arrays | |
- get array of keys of found values | |
<?php | |
/** Function 'inArray' checks if a value exists in an array (also multidimensional): if string as substring (case-[in]sensitive), or other value as a element of the same type | |
* | |
* @param mixed $needle Value to find (string: as (sub)string, array: as (sub)array, other: as exact element) | |
* @param array $haystack The array for search (can be multidimensional) | |
* @param bool $also_similar (optional, default: false) | |
* for string $needle - default: false, means case-sensitive, | |
* 1: case-insensitivity comparision | |
* 2: case-insensitivity comparision, and also any element of $haystack can be substring of $needle | |
* for array $needle - default: $needle has to be exact element of $haystack | |
* 1: array $needle also can have the same values as values of any $haystack element (regardless of order and keys!) | |
* 2: array $needle values also can be sub-array of any element of $haystack (multidimensional) | |
* for others - doesn't matter | |
* @param bool $return_keys (optional, default: false) If true, returns array of keys of found values | |
* @return bool Whether $needle is found in the array, or keys for found values (first dimension only) | |
*/ | |
function inArray($needle, $haystack, $also_similar = false, $return_keys = false) { | |
if (!is_array($haystack)) return false; | |
if ($needle===$haystack) return true; | |
if ($also_similar!==false) if ($also_similar<3) { | |
if (is_array($needle)) { | |
if (in_array($n=$needle, $h=$haystack, true)) {if ($return_keys) $res[]=$key; else return true;} | |
elseif ($also_similar>0) { | |
sort($n); | |
sort($h); | |
if (($n===$h) || (in_array($n, $h, true))) {if ($return_keys) $res[]=$key; else return true;} | |
elseif ($also_similar>1) { | |
$h = array_intersect($h, $n); | |
sort($h); | |
if ($n===$h) {if ($return_keys) $res[]=$key; else return true;} | |
} | |
} | |
} | |
} else $also_similar-=10; | |
foreach ($haystack as $key => $value) { | |
if ($needle===$value) {if ($return_keys) $res[]=$key; else return true;} | |
elseif ((is_string($needle)) && (is_string($value))) { | |
if ( | |
(strpos($value, $needle)!==false) | |
|| ($also_similar==1) && (stripos($value, $needle)!==false) | |
|| ($also_similar==2) && (stripos($needle, $value)!==false) | |
) { | |
if ($return_keys) $res[]=$key; else return true; | |
} | |
} elseif (is_array($value)) { | |
if(is_array($needle)) { | |
if (in_array($needle, $value, true)) {if ($return_keys) $res[]=$key; else return true;} | |
elseif ($also_similar>0) { | |
$n = $needle; | |
sort($n); | |
$h = $value; | |
sort($h); | |
if (($n===$h) || (in_array($n, $h, true))) {if ($return_keys) $res[]=$key; else return true;} | |
elseif ($also_similar>1) { | |
$h = array_intersect($h, $n); | |
sort($h); | |
if ($n===$h) {if ($return_keys) $res[]=$key; else return true;} | |
} | |
} | |
} | |
if (inArray($needle, $value, $also_similar+10, $return_keys)) {if ($return_keys) $res[]=$key; else return true;} | |
} | |
} | |
if (($return_keys)&&(is_array($res))) return $res; else return false; | |
} | |
// Examples | |
$a=array ( | |
1 => 'zero', | |
0 => 'zero1', | |
2 => | |
array ( | |
'X' => 'AAZery', | |
'Y' => 'Zero', | |
'Z' => 1234, | |
0 => | |
array ( | |
1 => 12345, | |
2 => 'ZEro2', | |
5 => 'Hello', | |
), | |
), | |
'end' => '123', | |
) | |
var_dump(inArray(123,$a)); //bool(false) | |
var_dump(inArray(1234,$a)); //bool(true) | |
var_export(inArray(1234,$a,0,TRUE)); //array ( 0 => 2, ) | |
var_dump(inArray("1234",$a)); //bool(false) | |
var_dump(inArray("23",$a)); //bool(true) | |
var_export(inArray("23",$a,0,TRUE)); //array ( 0 => 'end', ) | |
var_dump(inArray(12345,$a)); //bool(true) | |
var_dump(inArray("zer",$a)); //bool(true) | |
var_export(inArray("zer",$a,0,TRUE)); /* array ( | |
0 => 1, | |
1 => 0, | |
) */ | |
var_dump(inArray("Zer",$a)); //bool(true) | |
var_dump(inArray("ZER",$a)); //bool(false) | |
var_dump(inArray("ZER",$a,1)); //bool(true) | |
var_export(inArray("ZER",$a,1,TRUE)); /* array ( | |
0 => 1, | |
1 => 0, | |
2 => 2, | |
) */ | |
var_dump(inArray("ZERo2",$a,1)); //bool(true) | |
var_dump(inArray("ZERo2",$a)); //bool(false) | |
var_dump(inArray(array(1=>12345,2=>"ZEro2"),$a)); //bool(false) | |
var_dump(inArray(array(2=>"ZEro2",1=>12345,"Hello"),$a)); //bool(false) | |
var_dump(inArray(array(2=>"ZEro2",1=>12345,"Hello"),$a,1)); //bool(true) | |
var_export(inArray(array(2=>"ZEro2",1=>12345,"Hello"),$a,1,TRUE)); //array ( 0 => 2,) | |
var_dump(inArray(array(2=>"ZEro2",1=>12345),$a,2)); //bool(true) | |
var_export(inArray(array(2=>"ZEro2",1=>12345),$a,2,TRUE)); //array ( 0 => 2,) | |
var_dump(inArray(array(2=>"ZEro2",1=>12345,"Hello"),$a,3)); //bool(false) | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment