PHP multidimensional array search by value
I have an array where I want to search the uid
and get the key of the array.
Examples
Assume we have the following 2-dimensional array:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
The function call search_by_uid(100)
(uid of first user) should return 0
.
The function call search_by_uid(40489)
should return 2
.
I tried making loops, but I want a faster executing code.
php
add a comment |
I have an array where I want to search the uid
and get the key of the array.
Examples
Assume we have the following 2-dimensional array:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
The function call search_by_uid(100)
(uid of first user) should return 0
.
The function call search_by_uid(40489)
should return 2
.
I tried making loops, but I want a faster executing code.
php
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
6
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the twoarray_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.
– Josh
Feb 14 '16 at 12:49
add a comment |
I have an array where I want to search the uid
and get the key of the array.
Examples
Assume we have the following 2-dimensional array:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
The function call search_by_uid(100)
(uid of first user) should return 0
.
The function call search_by_uid(40489)
should return 2
.
I tried making loops, but I want a faster executing code.
php
I have an array where I want to search the uid
and get the key of the array.
Examples
Assume we have the following 2-dimensional array:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
The function call search_by_uid(100)
(uid of first user) should return 0
.
The function call search_by_uid(40489)
should return 2
.
I tried making loops, but I want a faster executing code.
php
php
edited Oct 25 '17 at 22:11
angoru
3,28311117
3,28311117
asked Jul 12 '11 at 8:41
RachitRachit
1,2592107
1,2592107
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
6
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the twoarray_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.
– Josh
Feb 14 '16 at 12:49
add a comment |
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
6
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the twoarray_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.
– Josh
Feb 14 '16 at 12:49
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
6
6
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the two
array_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.– Josh
Feb 14 '16 at 12:49
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the two
array_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.– Josh
Feb 14 '16 at 12:49
add a comment |
21 Answers
21
active
oldest
votes
function searchForId($id, $array)
foreach ($array as $key => $val)
if ($val['uid'] === $id)
return $key;
return null;
This will work. You should call it like this:
$id = searchForId('100', $userdb);
It is important to know that if you are using ===
operator compared types have to be exactly same, in this example you have to search string
or just use ==
instead ===
.
Based on angoru answer. In later versions of PHP (>= 5.5.0
) you can use one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Here is documentation: http://php.net/manual/en/function.array-column.php.
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replacearray_column($userdb, 'uid')
witharray_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better isarray_search
, isn't it?
– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (theforeach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extractarray_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue
– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
|
show 1 more comment
If you are using (PHP 5 >= 5.5.0) you don't have to write your own function to do this, just write this line and it's done.
If you want just one result:
$key = array_search(40489, array_column($userdb, 'uid'));
For multiple results
$keys = array_keys(array_column($userdb, 'uid'), 40489);
In case you have an associative array as pointed in the comments you could make it with:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
If you are using PHP < 5.5.0, you can use this backport, thanks ramsey!
Update: I've been making some simple benchmarks and the multiple results form seems to be the fastest one, even faster than the Jakub custom function!
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
This won't work with an associative array, however you can get around that like so:array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
|
show 6 more comments
Building off Jakub's excellent answer, here is a more generalized search that will allow the key to specified (not just for uid):
function searcharray($value, $key, $array)
foreach ($array as $k => $val)
if ($val[$key] == $value)
return $k;
return null;
Usage: $results = searcharray('searchvalue', searchkey, $array);
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
add a comment |
I know this was already answered, but I used this and extended it a little more in my code so that you didn't have search by only the uid. I just want to share it for anyone else who may need that functionality.
Here's my example and please bare in mind this is my first answer. I took out the param array because I only needed to search one specific array, but you could easily add it in. I wanted to essentially search by more than just the uid.
Also, in my situation there may be multiple keys to return as a result of searching by other fields that may not be unique.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
$keys = $key;
return $keys;
Later, I ended up writing this to allow me to search for another value and associative key. So my first example allows you to search for a value in any specific associative key, and return all the matches.
This second example shows you where a value ('Taylor') is found in a certain associative key (first_name) AND another value (true) is found in another associative key (employed), and returns all matches (Keys where people with first name 'Taylor' AND are employed).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
if (isset($other_matching_key) && isset($other_matching_value))
if ($cur_value[$other_matching_key] == $other_matching_value)
$keys = $key;
else
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys = $key;
return $keys;
Use of function
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Result
Array ( [0] => 2 )
add a comment |
I modified one of examples below description function array_search. Function searchItemsByKey
return all value(s) by $key from multidimensional array ( N levels). Perhaps , it would be useful for somebody. Example:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
Function code:
function searchItemsByKey($array, $key)
$results = array();
if (is_array($array))
if (isset($array[$key]) && key($array)==$key)
$results = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
return $results;
add a comment |
In later versions of PHP (>= 5.5.0) you can use this one-liner:
$key = array_search('100', array_column($userdb, 'uid'));
add a comment |
Looks array_filter will be suitable solution for this...
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
PHP Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search)
return $v['uid'] => $search;
)
$values= print_r(array_value($found));
$keys = print_r(array_keys($found));
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
add a comment |
Even though this is an old question and has an accepted answer, Thought i would suggest one change to the accepted answer.. So first off, i agree the accepted answer is correct here.
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if ($val[$sKey] == $id)
return $key;
return false;
Replacing the preset 'uid' with a parameter in the function instead, so now calling the below code means you can use the one function across multiple array types. Small change, but one that makes the slight difference.
// Array Data Of Users
$userdb = array (
array ('uid' => '100','name' => 'Sandra Shush','url' => 'urlof100' ),
array ('uid' => '5465','name' => 'Stefanie Mcmohn','url' => 'urlof100' ),
array ('uid' => '40489','name' => 'Michael','url' => 'urlof40489' ),
);
// Obtain The Key Of The Array
$arrayKey = searchArrayKeyVal("uid", '100', $userdb);
if ($arrayKey!==false)
echo "Search Result: ", $userdb[$arrayKey]['name'];
else
echo "Search Result can not be found";
PHP Fiddle Example
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result tonull
and then in the code, you are comparing it tofalse
.
– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
add a comment |
Here is one liner for the same,
$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
add a comment |
I had to use un function which finds every elements in an array. So I modified the function done by Jakub Truneček as follow:
function search_in_array_r($needle, $array)
$found = array();
foreach ($array as $key => $val)
if ($val[1] == $needle)
array_push($found, $val[1]);
if (count($found) != 0)
return $found;
else
return null;
add a comment |
/**
* searches a simple as well as multi dimension array
* @param type $needle
* @param type $haystack
* @return boolean
*/
public static function in_array_multi($needle, $haystack)
$needle = trim($needle);
if(!is_array($haystack))
return False;
foreach($haystack as $key=>$value)
if(is_array($value))
if(self::in_array_multi($needle, $value))
return True;
else
self::in_array_multi($needle, $value);
else
if(trim($value) === trim($needle))//visibility fix//
error_log("$value === $needle setting visibility to 1 hidden");
return True;
return False;
add a comment |
you can use this function ;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
add a comment |
$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];
$found = null;
$search = 'eee';
array_walk($a, function ($k, $v) use ($search, &$found)
if (in_array($search, $k))
$found = $v;
);
var_dump($found);
add a comment |
I want to check tha in the following array $arr
is there 'abc' exists in sub arrays or not
$arr = array(
array(
'title' => 'abc'
)
);
Then i can use this
$res = array_search('abc', array_column($arr, 'title'));
if($res == '')
echo 'exists';
else
echo 'notExists';
I think This is the Most simple way to define
add a comment |
Just share, maybe can like this.
if( ! function_exists('arraySearchMulti'))
function arraySearchMulti($search,$key,$array,$returnKey=false)
foreach ($array as $k => $val)
if (isset($val[$key]))
if ((string)$val[$key] == (string)$search)
return ($returnKey ? $k : $val);
else
return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
return null;
add a comment |
Try this also
function search_in_array($srchvalue, $array)
if (is_array($array) && count($array) > 0)
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE)
foreach ($array as $key => $value)
if (is_array($value) && count($value) > 0)
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE)
return $foundkey;
else
return $foundkey;
add a comment |
for( $i =0; $i < sizeof($allUsers); $i++)
$NEEDLE1='firstname';
$NEEDLE2='emailAddress';
$sterm='Tofind';
if(isset($allUsers[$i][$NEEDLE1]) && isset($allUsers[$i][$NEEDLE2])
Print_r($resultsMatched); //will give array for matched values even partially matched
With help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question.
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
add a comment |
Expanding on the function @mayhem created, this example would be more of a "fuzzy" search in case you just want to match part (most) of a search string:
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false)
return $key;
return false;
For example the value in the array is Welcome to New York! and you wanted the first instance of just "New York!"
add a comment |
Try this
<?php
function recursive_array_search($needle,$haystack)
foreach($haystack as $key=>$value)
$current_key=$key;
if($needle===$value OR (is_array($value) &&
recursive_array_search($needle,$value) !== false))
return $current_key;
return false;
?>
add a comment |
$search1 = 'demo';
$search2 = 'bob';
$arr = array('0' => 'hello','1' => 'test','2' => 'john','3' => array('0' => 'martin', '1' => 'bob'),'4' => 'demo');
foreach ($arr as $value)
if (is_array($value))
if (in_array($search2, $value))
echo "successsfully";
//execute your code
else
if ($value == $search1)
echo "success";
add a comment |
If question i.e.
$a = [
[
"_id" => "5a96933414d48831a41901f2",
"discount_amount" => 3.29,
"discount_id" => "5a92656a14d488570c2c44a2",
],
[
"_id" => "5a9790fd14d48879cf16a9e8",
"discount_amount" => 4.53,
"discount_id" => "5a9265b914d488548513b122",
],
[
"_id" => "5a98083614d488191304b6c3",
"discount_amount" => 15.24,
"discount_id" => "5a92806a14d48858ff5c2ec3",
],
[
"_id" => "5a982a4914d48824721eafe3",
"discount_amount" => 45.74,
"discount_id" => "5a928ce414d488609e73b443",
],
[
"_id" => "5a982a4914d48824721eafe55",
"discount_amount" => 10.26,
"discount_id" => "5a928ce414d488609e73b443",
],
];
Ans:
function searchForId($id, $array)
$did=0;
$dia=0;
foreach ($array as $key => $val)
if ($val['discount_id'] === $id)
$dia +=$val['discount_amount'];
$did++;
if($dia != '')
echo $dia;
var_dump($did);
return null;
;
print_r(searchForId('5a928ce414d488609e73b443',$a));
add a comment |
21 Answers
21
active
oldest
votes
21 Answers
21
active
oldest
votes
active
oldest
votes
active
oldest
votes
function searchForId($id, $array)
foreach ($array as $key => $val)
if ($val['uid'] === $id)
return $key;
return null;
This will work. You should call it like this:
$id = searchForId('100', $userdb);
It is important to know that if you are using ===
operator compared types have to be exactly same, in this example you have to search string
or just use ==
instead ===
.
Based on angoru answer. In later versions of PHP (>= 5.5.0
) you can use one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Here is documentation: http://php.net/manual/en/function.array-column.php.
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replacearray_column($userdb, 'uid')
witharray_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better isarray_search
, isn't it?
– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (theforeach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extractarray_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue
– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
|
show 1 more comment
function searchForId($id, $array)
foreach ($array as $key => $val)
if ($val['uid'] === $id)
return $key;
return null;
This will work. You should call it like this:
$id = searchForId('100', $userdb);
It is important to know that if you are using ===
operator compared types have to be exactly same, in this example you have to search string
or just use ==
instead ===
.
Based on angoru answer. In later versions of PHP (>= 5.5.0
) you can use one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Here is documentation: http://php.net/manual/en/function.array-column.php.
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replacearray_column($userdb, 'uid')
witharray_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better isarray_search
, isn't it?
– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (theforeach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extractarray_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue
– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
|
show 1 more comment
function searchForId($id, $array)
foreach ($array as $key => $val)
if ($val['uid'] === $id)
return $key;
return null;
This will work. You should call it like this:
$id = searchForId('100', $userdb);
It is important to know that if you are using ===
operator compared types have to be exactly same, in this example you have to search string
or just use ==
instead ===
.
Based on angoru answer. In later versions of PHP (>= 5.5.0
) you can use one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Here is documentation: http://php.net/manual/en/function.array-column.php.
function searchForId($id, $array)
foreach ($array as $key => $val)
if ($val['uid'] === $id)
return $key;
return null;
This will work. You should call it like this:
$id = searchForId('100', $userdb);
It is important to know that if you are using ===
operator compared types have to be exactly same, in this example you have to search string
or just use ==
instead ===
.
Based on angoru answer. In later versions of PHP (>= 5.5.0
) you can use one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Here is documentation: http://php.net/manual/en/function.array-column.php.
edited May 23 '17 at 12:10
Community♦
11
11
answered Jul 12 '11 at 8:44
Jakub TrunečekJakub Truneček
4,97721327
4,97721327
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replacearray_column($userdb, 'uid')
witharray_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better isarray_search
, isn't it?
– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (theforeach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extractarray_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue
– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
|
show 1 more comment
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replacearray_column($userdb, 'uid')
witharray_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better isarray_search
, isn't it?
– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (theforeach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extractarray_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue
– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
4
4
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replace
array_column($userdb, 'uid')
with array_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
You should also be able to do this without PHP 5.5 in a one liner using array_map in place of array_column. Just replace
array_column($userdb, 'uid')
with array_map(function($v)return $v['uid'];,$userdb)
– Jesse Green
Feb 23 '16 at 18:12
Yea, you are right. Lambda functions are available since PHP 5.3. and better is
array_search
, isn't it?– Jakub Truneček
Feb 25 '16 at 12:43
Yea, you are right. Lambda functions are available since PHP 5.3. and better is
array_search
, isn't it?– Jakub Truneček
Feb 25 '16 at 12:43
@angoru I think the original solution (the
foreach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extract array_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue– BeetleJuice
Jul 27 '17 at 17:19
@angoru I think the original solution (the
foreach
loop) will perform faster because it stops as soon as a match is found. The newer solution has to iterate through the whole array once to extract array_column
, then loop through it a second time to perform the search (until it finds a match). The newer solution is easier to read, more concise, but the OP specifically brought up performance as an issue– BeetleJuice
Jul 27 '17 at 17:19
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček . I have something to do with the same array given in the question. I want user's name from the array by passing id. Function findUserName(40489) should return 'Michael'. How its possible?
– Ashok Gujjar
Aug 31 '18 at 6:40
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
@JakubTruneček Hi i have faced this problem in my code but i have quite different thing. In my case 'uid' value present multiple times so i need to get an arrays of founded key.
– Bhavin Thummar
Sep 25 '18 at 11:54
|
show 1 more comment
If you are using (PHP 5 >= 5.5.0) you don't have to write your own function to do this, just write this line and it's done.
If you want just one result:
$key = array_search(40489, array_column($userdb, 'uid'));
For multiple results
$keys = array_keys(array_column($userdb, 'uid'), 40489);
In case you have an associative array as pointed in the comments you could make it with:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
If you are using PHP < 5.5.0, you can use this backport, thanks ramsey!
Update: I've been making some simple benchmarks and the multiple results form seems to be the fastest one, even faster than the Jakub custom function!
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
This won't work with an associative array, however you can get around that like so:array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
|
show 6 more comments
If you are using (PHP 5 >= 5.5.0) you don't have to write your own function to do this, just write this line and it's done.
If you want just one result:
$key = array_search(40489, array_column($userdb, 'uid'));
For multiple results
$keys = array_keys(array_column($userdb, 'uid'), 40489);
In case you have an associative array as pointed in the comments you could make it with:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
If you are using PHP < 5.5.0, you can use this backport, thanks ramsey!
Update: I've been making some simple benchmarks and the multiple results form seems to be the fastest one, even faster than the Jakub custom function!
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
This won't work with an associative array, however you can get around that like so:array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
|
show 6 more comments
If you are using (PHP 5 >= 5.5.0) you don't have to write your own function to do this, just write this line and it's done.
If you want just one result:
$key = array_search(40489, array_column($userdb, 'uid'));
For multiple results
$keys = array_keys(array_column($userdb, 'uid'), 40489);
In case you have an associative array as pointed in the comments you could make it with:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
If you are using PHP < 5.5.0, you can use this backport, thanks ramsey!
Update: I've been making some simple benchmarks and the multiple results form seems to be the fastest one, even faster than the Jakub custom function!
If you are using (PHP 5 >= 5.5.0) you don't have to write your own function to do this, just write this line and it's done.
If you want just one result:
$key = array_search(40489, array_column($userdb, 'uid'));
For multiple results
$keys = array_keys(array_column($userdb, 'uid'), 40489);
In case you have an associative array as pointed in the comments you could make it with:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
If you are using PHP < 5.5.0, you can use this backport, thanks ramsey!
Update: I've been making some simple benchmarks and the multiple results form seems to be the fastest one, even faster than the Jakub custom function!
edited Oct 25 '17 at 22:06
answered Jul 2 '14 at 9:08
angoruangoru
3,28311117
3,28311117
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
This won't work with an associative array, however you can get around that like so:array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
|
show 6 more comments
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
This won't work with an associative array, however you can get around that like so:array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
what if the value I am searching(in this example is 40489) appears more that one time and I want to get all the keys that it appears?
– Dimitris Papageorgiou
May 15 '15 at 9:13
2
2
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
i've edit the post to include multiple results.
– angoru
May 19 '15 at 4:28
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
if the value 40489 appears more then once in the array will the function return an array of keys ... ?? @angoru
– jishan
May 19 '15 at 8:23
1
1
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
This did not work for me when the key in the $userdb did not start as 0,1, 2 etc.. and say the key are 1234,4566 etc. The resulting keys after the array_search are always 0,1,2 and so on
– Kaushtuv
Apr 11 '16 at 6:41
1
1
This won't work with an associative array, however you can get around that like so:
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
This won't work with an associative array, however you can get around that like so:
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
– John Mellor
Jun 2 '17 at 5:53
|
show 6 more comments
Building off Jakub's excellent answer, here is a more generalized search that will allow the key to specified (not just for uid):
function searcharray($value, $key, $array)
foreach ($array as $k => $val)
if ($val[$key] == $value)
return $k;
return null;
Usage: $results = searcharray('searchvalue', searchkey, $array);
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
add a comment |
Building off Jakub's excellent answer, here is a more generalized search that will allow the key to specified (not just for uid):
function searcharray($value, $key, $array)
foreach ($array as $k => $val)
if ($val[$key] == $value)
return $k;
return null;
Usage: $results = searcharray('searchvalue', searchkey, $array);
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
add a comment |
Building off Jakub's excellent answer, here is a more generalized search that will allow the key to specified (not just for uid):
function searcharray($value, $key, $array)
foreach ($array as $k => $val)
if ($val[$key] == $value)
return $k;
return null;
Usage: $results = searcharray('searchvalue', searchkey, $array);
Building off Jakub's excellent answer, here is a more generalized search that will allow the key to specified (not just for uid):
function searcharray($value, $key, $array)
foreach ($array as $k => $val)
if ($val[$key] == $value)
return $k;
return null;
Usage: $results = searcharray('searchvalue', searchkey, $array);
edited May 23 '17 at 12:02
Community♦
11
11
answered Jul 12 '13 at 17:04
reflexivreflexiv
1,30211623
1,30211623
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
add a comment |
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
This is very helpful, I feel like I'm on the cusp of solving my problem using this solution but I'm still having some issue. Could you perhaps provide insight? The question can be found here: stackoverflow.com/questions/28704644/…
– jasenmp
Feb 25 '15 at 0:15
add a comment |
I know this was already answered, but I used this and extended it a little more in my code so that you didn't have search by only the uid. I just want to share it for anyone else who may need that functionality.
Here's my example and please bare in mind this is my first answer. I took out the param array because I only needed to search one specific array, but you could easily add it in. I wanted to essentially search by more than just the uid.
Also, in my situation there may be multiple keys to return as a result of searching by other fields that may not be unique.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
$keys = $key;
return $keys;
Later, I ended up writing this to allow me to search for another value and associative key. So my first example allows you to search for a value in any specific associative key, and return all the matches.
This second example shows you where a value ('Taylor') is found in a certain associative key (first_name) AND another value (true) is found in another associative key (employed), and returns all matches (Keys where people with first name 'Taylor' AND are employed).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
if (isset($other_matching_key) && isset($other_matching_value))
if ($cur_value[$other_matching_key] == $other_matching_value)
$keys = $key;
else
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys = $key;
return $keys;
Use of function
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Result
Array ( [0] => 2 )
add a comment |
I know this was already answered, but I used this and extended it a little more in my code so that you didn't have search by only the uid. I just want to share it for anyone else who may need that functionality.
Here's my example and please bare in mind this is my first answer. I took out the param array because I only needed to search one specific array, but you could easily add it in. I wanted to essentially search by more than just the uid.
Also, in my situation there may be multiple keys to return as a result of searching by other fields that may not be unique.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
$keys = $key;
return $keys;
Later, I ended up writing this to allow me to search for another value and associative key. So my first example allows you to search for a value in any specific associative key, and return all the matches.
This second example shows you where a value ('Taylor') is found in a certain associative key (first_name) AND another value (true) is found in another associative key (employed), and returns all matches (Keys where people with first name 'Taylor' AND are employed).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
if (isset($other_matching_key) && isset($other_matching_value))
if ($cur_value[$other_matching_key] == $other_matching_value)
$keys = $key;
else
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys = $key;
return $keys;
Use of function
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Result
Array ( [0] => 2 )
add a comment |
I know this was already answered, but I used this and extended it a little more in my code so that you didn't have search by only the uid. I just want to share it for anyone else who may need that functionality.
Here's my example and please bare in mind this is my first answer. I took out the param array because I only needed to search one specific array, but you could easily add it in. I wanted to essentially search by more than just the uid.
Also, in my situation there may be multiple keys to return as a result of searching by other fields that may not be unique.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
$keys = $key;
return $keys;
Later, I ended up writing this to allow me to search for another value and associative key. So my first example allows you to search for a value in any specific associative key, and return all the matches.
This second example shows you where a value ('Taylor') is found in a certain associative key (first_name) AND another value (true) is found in another associative key (employed), and returns all matches (Keys where people with first name 'Taylor' AND are employed).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
if (isset($other_matching_key) && isset($other_matching_value))
if ($cur_value[$other_matching_key] == $other_matching_value)
$keys = $key;
else
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys = $key;
return $keys;
Use of function
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Result
Array ( [0] => 2 )
I know this was already answered, but I used this and extended it a little more in my code so that you didn't have search by only the uid. I just want to share it for anyone else who may need that functionality.
Here's my example and please bare in mind this is my first answer. I took out the param array because I only needed to search one specific array, but you could easily add it in. I wanted to essentially search by more than just the uid.
Also, in my situation there may be multiple keys to return as a result of searching by other fields that may not be unique.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
$keys = $key;
return $keys;
Later, I ended up writing this to allow me to search for another value and associative key. So my first example allows you to search for a value in any specific associative key, and return all the matches.
This second example shows you where a value ('Taylor') is found in a certain associative key (first_name) AND another value (true) is found in another associative key (employed), and returns all matches (Keys where people with first name 'Taylor' AND are employed).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null)
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value)
if ($cur_value[$key_to_search] == $search_value)
if (isset($other_matching_key) && isset($other_matching_value))
if ($cur_value[$other_matching_key] == $other_matching_value)
$keys = $key;
else
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys = $key;
return $keys;
Use of function
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Result
Array ( [0] => 2 )
edited Feb 23 '18 at 14:09
Nadeem0035
1,4051222
1,4051222
answered Feb 22 '13 at 19:29
amurrellamurrell
1,2981321
1,2981321
add a comment |
add a comment |
I modified one of examples below description function array_search. Function searchItemsByKey
return all value(s) by $key from multidimensional array ( N levels). Perhaps , it would be useful for somebody. Example:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
Function code:
function searchItemsByKey($array, $key)
$results = array();
if (is_array($array))
if (isset($array[$key]) && key($array)==$key)
$results = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
return $results;
add a comment |
I modified one of examples below description function array_search. Function searchItemsByKey
return all value(s) by $key from multidimensional array ( N levels). Perhaps , it would be useful for somebody. Example:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
Function code:
function searchItemsByKey($array, $key)
$results = array();
if (is_array($array))
if (isset($array[$key]) && key($array)==$key)
$results = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
return $results;
add a comment |
I modified one of examples below description function array_search. Function searchItemsByKey
return all value(s) by $key from multidimensional array ( N levels). Perhaps , it would be useful for somebody. Example:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
Function code:
function searchItemsByKey($array, $key)
$results = array();
if (is_array($array))
if (isset($array[$key]) && key($array)==$key)
$results = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
return $results;
I modified one of examples below description function array_search. Function searchItemsByKey
return all value(s) by $key from multidimensional array ( N levels). Perhaps , it would be useful for somebody. Example:
$arr = array(
'XXX'=>array(
'YYY'=> array(
'AAA'=> array(
'keyN' =>'value1'
)
),
'ZZZ'=> array(
'BBB'=> array(
'keyN' => 'value2'
)
)
//.....
)
);
$result = searchItemsByKey($arr,'keyN');
print '<pre>';
print_r($result);
print '<pre>';
// OUTPUT
Array
(
[0] => value1
[1] => value2
)
Function code:
function searchItemsByKey($array, $key)
$results = array();
if (is_array($array))
if (isset($array[$key]) && key($array)==$key)
$results = $array[$key];
foreach ($array as $sub_array)
$results = array_merge($results, searchItemsByKey($sub_array, $key));
return $results;
edited Sep 16 '14 at 6:15
answered Jan 25 '14 at 14:02
voodoo417voodoo417
9,23032229
9,23032229
add a comment |
add a comment |
In later versions of PHP (>= 5.5.0) you can use this one-liner:
$key = array_search('100', array_column($userdb, 'uid'));
add a comment |
In later versions of PHP (>= 5.5.0) you can use this one-liner:
$key = array_search('100', array_column($userdb, 'uid'));
add a comment |
In later versions of PHP (>= 5.5.0) you can use this one-liner:
$key = array_search('100', array_column($userdb, 'uid'));
In later versions of PHP (>= 5.5.0) you can use this one-liner:
$key = array_search('100', array_column($userdb, 'uid'));
edited Apr 10 '18 at 11:25
Stephen Kennedy
7,199134967
7,199134967
answered Jun 14 '17 at 8:59
Iryna BatvinaIryna Batvina
43753
43753
add a comment |
add a comment |
Looks array_filter will be suitable solution for this...
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
PHP Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search)
return $v['uid'] => $search;
)
$values= print_r(array_value($found));
$keys = print_r(array_keys($found));
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
add a comment |
Looks array_filter will be suitable solution for this...
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
PHP Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search)
return $v['uid'] => $search;
)
$values= print_r(array_value($found));
$keys = print_r(array_keys($found));
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
add a comment |
Looks array_filter will be suitable solution for this...
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
PHP Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search)
return $v['uid'] => $search;
)
$values= print_r(array_value($found));
$keys = print_r(array_keys($found));
Looks array_filter will be suitable solution for this...
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(url) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
PHP Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search)
return $v['uid'] => $search;
)
$values= print_r(array_value($found));
$keys = print_r(array_keys($found));
edited Jan 2 '17 at 6:49
answered Dec 16 '16 at 15:01
BEJGAM SHIVA PRASADBEJGAM SHIVA PRASAD
768617
768617
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
add a comment |
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
@BEJAM SHIVA PRASAD could you please help me out with this stackoverflow.com/questions/44721195/… ?
– Valay
Jun 23 '17 at 13:38
shows an error :
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
shows an error :
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
– Shihas
Apr 11 '18 at 11:21
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
Can you please paste more info I mean which line and your code and array structure.
– BEJGAM SHIVA PRASAD
Apr 12 '18 at 4:01
add a comment |
Even though this is an old question and has an accepted answer, Thought i would suggest one change to the accepted answer.. So first off, i agree the accepted answer is correct here.
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if ($val[$sKey] == $id)
return $key;
return false;
Replacing the preset 'uid' with a parameter in the function instead, so now calling the below code means you can use the one function across multiple array types. Small change, but one that makes the slight difference.
// Array Data Of Users
$userdb = array (
array ('uid' => '100','name' => 'Sandra Shush','url' => 'urlof100' ),
array ('uid' => '5465','name' => 'Stefanie Mcmohn','url' => 'urlof100' ),
array ('uid' => '40489','name' => 'Michael','url' => 'urlof40489' ),
);
// Obtain The Key Of The Array
$arrayKey = searchArrayKeyVal("uid", '100', $userdb);
if ($arrayKey!==false)
echo "Search Result: ", $userdb[$arrayKey]['name'];
else
echo "Search Result can not be found";
PHP Fiddle Example
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result tonull
and then in the code, you are comparing it tofalse
.
– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
add a comment |
Even though this is an old question and has an accepted answer, Thought i would suggest one change to the accepted answer.. So first off, i agree the accepted answer is correct here.
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if ($val[$sKey] == $id)
return $key;
return false;
Replacing the preset 'uid' with a parameter in the function instead, so now calling the below code means you can use the one function across multiple array types. Small change, but one that makes the slight difference.
// Array Data Of Users
$userdb = array (
array ('uid' => '100','name' => 'Sandra Shush','url' => 'urlof100' ),
array ('uid' => '5465','name' => 'Stefanie Mcmohn','url' => 'urlof100' ),
array ('uid' => '40489','name' => 'Michael','url' => 'urlof40489' ),
);
// Obtain The Key Of The Array
$arrayKey = searchArrayKeyVal("uid", '100', $userdb);
if ($arrayKey!==false)
echo "Search Result: ", $userdb[$arrayKey]['name'];
else
echo "Search Result can not be found";
PHP Fiddle Example
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result tonull
and then in the code, you are comparing it tofalse
.
– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
add a comment |
Even though this is an old question and has an accepted answer, Thought i would suggest one change to the accepted answer.. So first off, i agree the accepted answer is correct here.
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if ($val[$sKey] == $id)
return $key;
return false;
Replacing the preset 'uid' with a parameter in the function instead, so now calling the below code means you can use the one function across multiple array types. Small change, but one that makes the slight difference.
// Array Data Of Users
$userdb = array (
array ('uid' => '100','name' => 'Sandra Shush','url' => 'urlof100' ),
array ('uid' => '5465','name' => 'Stefanie Mcmohn','url' => 'urlof100' ),
array ('uid' => '40489','name' => 'Michael','url' => 'urlof40489' ),
);
// Obtain The Key Of The Array
$arrayKey = searchArrayKeyVal("uid", '100', $userdb);
if ($arrayKey!==false)
echo "Search Result: ", $userdb[$arrayKey]['name'];
else
echo "Search Result can not be found";
PHP Fiddle Example
Even though this is an old question and has an accepted answer, Thought i would suggest one change to the accepted answer.. So first off, i agree the accepted answer is correct here.
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if ($val[$sKey] == $id)
return $key;
return false;
Replacing the preset 'uid' with a parameter in the function instead, so now calling the below code means you can use the one function across multiple array types. Small change, but one that makes the slight difference.
// Array Data Of Users
$userdb = array (
array ('uid' => '100','name' => 'Sandra Shush','url' => 'urlof100' ),
array ('uid' => '5465','name' => 'Stefanie Mcmohn','url' => 'urlof100' ),
array ('uid' => '40489','name' => 'Michael','url' => 'urlof40489' ),
);
// Obtain The Key Of The Array
$arrayKey = searchArrayKeyVal("uid", '100', $userdb);
if ($arrayKey!==false)
echo "Search Result: ", $userdb[$arrayKey]['name'];
else
echo "Search Result can not be found";
PHP Fiddle Example
edited Jun 21 '16 at 0:46
answered Feb 4 '15 at 2:02
MayhemMayhem
2,21911418
2,21911418
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result tonull
and then in the code, you are comparing it tofalse
.
– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
add a comment |
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result tonull
and then in the code, you are comparing it tofalse
.
– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
Another reason i use SOF... easier to google and find my own code or something i remember.. +1 for my own public repository
– Mayhem
Feb 18 '15 at 23:38
BTW, you are setting the result to
null
and then in the code, you are comparing it to false
.– Taha Paksu
Jun 20 '16 at 21:16
BTW, you are setting the result to
null
and then in the code, you are comparing it to false
.– Taha Paksu
Jun 20 '16 at 21:16
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
Corrected with returning false instead, but null might be better incase of checking for booleans
– Mayhem
Jun 21 '16 at 0:46
add a comment |
Here is one liner for the same,
$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
add a comment |
Here is one liner for the same,
$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
add a comment |
Here is one liner for the same,
$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];
Here is one liner for the same,
$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];
answered Dec 22 '17 at 9:54
Rahul MeshramRahul Meshram
6,52441839
6,52441839
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
add a comment |
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
Thanks.. This is what I exactly need.
– Dolly
May 3 '18 at 9:35
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
welcome mate!!!
– Rahul Meshram
May 7 '18 at 8:55
add a comment |
I had to use un function which finds every elements in an array. So I modified the function done by Jakub Truneček as follow:
function search_in_array_r($needle, $array)
$found = array();
foreach ($array as $key => $val)
if ($val[1] == $needle)
array_push($found, $val[1]);
if (count($found) != 0)
return $found;
else
return null;
add a comment |
I had to use un function which finds every elements in an array. So I modified the function done by Jakub Truneček as follow:
function search_in_array_r($needle, $array)
$found = array();
foreach ($array as $key => $val)
if ($val[1] == $needle)
array_push($found, $val[1]);
if (count($found) != 0)
return $found;
else
return null;
add a comment |
I had to use un function which finds every elements in an array. So I modified the function done by Jakub Truneček as follow:
function search_in_array_r($needle, $array)
$found = array();
foreach ($array as $key => $val)
if ($val[1] == $needle)
array_push($found, $val[1]);
if (count($found) != 0)
return $found;
else
return null;
I had to use un function which finds every elements in an array. So I modified the function done by Jakub Truneček as follow:
function search_in_array_r($needle, $array)
$found = array();
foreach ($array as $key => $val)
if ($val[1] == $needle)
array_push($found, $val[1]);
if (count($found) != 0)
return $found;
else
return null;
edited Sep 17 '13 at 12:58
answered Sep 17 '13 at 12:42
csi_berncsi_bern
135
135
add a comment |
add a comment |
/**
* searches a simple as well as multi dimension array
* @param type $needle
* @param type $haystack
* @return boolean
*/
public static function in_array_multi($needle, $haystack)
$needle = trim($needle);
if(!is_array($haystack))
return False;
foreach($haystack as $key=>$value)
if(is_array($value))
if(self::in_array_multi($needle, $value))
return True;
else
self::in_array_multi($needle, $value);
else
if(trim($value) === trim($needle))//visibility fix//
error_log("$value === $needle setting visibility to 1 hidden");
return True;
return False;
add a comment |
/**
* searches a simple as well as multi dimension array
* @param type $needle
* @param type $haystack
* @return boolean
*/
public static function in_array_multi($needle, $haystack)
$needle = trim($needle);
if(!is_array($haystack))
return False;
foreach($haystack as $key=>$value)
if(is_array($value))
if(self::in_array_multi($needle, $value))
return True;
else
self::in_array_multi($needle, $value);
else
if(trim($value) === trim($needle))//visibility fix//
error_log("$value === $needle setting visibility to 1 hidden");
return True;
return False;
add a comment |
/**
* searches a simple as well as multi dimension array
* @param type $needle
* @param type $haystack
* @return boolean
*/
public static function in_array_multi($needle, $haystack)
$needle = trim($needle);
if(!is_array($haystack))
return False;
foreach($haystack as $key=>$value)
if(is_array($value))
if(self::in_array_multi($needle, $value))
return True;
else
self::in_array_multi($needle, $value);
else
if(trim($value) === trim($needle))//visibility fix//
error_log("$value === $needle setting visibility to 1 hidden");
return True;
return False;
/**
* searches a simple as well as multi dimension array
* @param type $needle
* @param type $haystack
* @return boolean
*/
public static function in_array_multi($needle, $haystack)
$needle = trim($needle);
if(!is_array($haystack))
return False;
foreach($haystack as $key=>$value)
if(is_array($value))
if(self::in_array_multi($needle, $value))
return True;
else
self::in_array_multi($needle, $value);
else
if(trim($value) === trim($needle))//visibility fix//
error_log("$value === $needle setting visibility to 1 hidden");
return True;
return False;
edited Jul 28 '14 at 4:52
answered Jul 28 '14 at 4:47
Ahad AliAhad Ali
36539
36539
add a comment |
add a comment |
you can use this function ;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
add a comment |
you can use this function ;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
add a comment |
you can use this function ;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
you can use this function ;
https://github.com/serhatozles/ArrayAdvancedSearch
<?php
include('ArraySearch.php');
$query = "a='Example World' and b>='2'";
$Array = array(
'a' => array('d' => '2'),
array('a' => 'Example World','b' => '2'),
array('c' => '3'), array('d' => '4'),
);
$Result = ArraySearch($Array,$query,1);
echo '<pre>';
print_r($Result);
echo '</pre>';
// Output:
// Array
// (
// [0] => Array
// (
// [a] => Example World
// [b] => 2
// )
//
// )
edited Jan 11 '15 at 15:09
answered Jan 31 '14 at 7:56
SerhatSerhat
166312
166312
add a comment |
add a comment |
$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];
$found = null;
$search = 'eee';
array_walk($a, function ($k, $v) use ($search, &$found)
if (in_array($search, $k))
$found = $v;
);
var_dump($found);
add a comment |
$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];
$found = null;
$search = 'eee';
array_walk($a, function ($k, $v) use ($search, &$found)
if (in_array($search, $k))
$found = $v;
);
var_dump($found);
add a comment |
$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];
$found = null;
$search = 'eee';
array_walk($a, function ($k, $v) use ($search, &$found)
if (in_array($search, $k))
$found = $v;
);
var_dump($found);
$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];
$found = null;
$search = 'eee';
array_walk($a, function ($k, $v) use ($search, &$found)
if (in_array($search, $k))
$found = $v;
);
var_dump($found);
answered Nov 24 '15 at 23:43
klayklay
1,30111530
1,30111530
add a comment |
add a comment |
I want to check tha in the following array $arr
is there 'abc' exists in sub arrays or not
$arr = array(
array(
'title' => 'abc'
)
);
Then i can use this
$res = array_search('abc', array_column($arr, 'title'));
if($res == '')
echo 'exists';
else
echo 'notExists';
I think This is the Most simple way to define
add a comment |
I want to check tha in the following array $arr
is there 'abc' exists in sub arrays or not
$arr = array(
array(
'title' => 'abc'
)
);
Then i can use this
$res = array_search('abc', array_column($arr, 'title'));
if($res == '')
echo 'exists';
else
echo 'notExists';
I think This is the Most simple way to define
add a comment |
I want to check tha in the following array $arr
is there 'abc' exists in sub arrays or not
$arr = array(
array(
'title' => 'abc'
)
);
Then i can use this
$res = array_search('abc', array_column($arr, 'title'));
if($res == '')
echo 'exists';
else
echo 'notExists';
I think This is the Most simple way to define
I want to check tha in the following array $arr
is there 'abc' exists in sub arrays or not
$arr = array(
array(
'title' => 'abc'
)
);
Then i can use this
$res = array_search('abc', array_column($arr, 'title'));
if($res == '')
echo 'exists';
else
echo 'notExists';
I think This is the Most simple way to define
answered Oct 26 '17 at 11:52
M.suleman KhanM.suleman Khan
269214
269214
add a comment |
add a comment |
Just share, maybe can like this.
if( ! function_exists('arraySearchMulti'))
function arraySearchMulti($search,$key,$array,$returnKey=false)
foreach ($array as $k => $val)
if (isset($val[$key]))
if ((string)$val[$key] == (string)$search)
return ($returnKey ? $k : $val);
else
return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
return null;
add a comment |
Just share, maybe can like this.
if( ! function_exists('arraySearchMulti'))
function arraySearchMulti($search,$key,$array,$returnKey=false)
foreach ($array as $k => $val)
if (isset($val[$key]))
if ((string)$val[$key] == (string)$search)
return ($returnKey ? $k : $val);
else
return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
return null;
add a comment |
Just share, maybe can like this.
if( ! function_exists('arraySearchMulti'))
function arraySearchMulti($search,$key,$array,$returnKey=false)
foreach ($array as $k => $val)
if (isset($val[$key]))
if ((string)$val[$key] == (string)$search)
return ($returnKey ? $k : $val);
else
return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
return null;
Just share, maybe can like this.
if( ! function_exists('arraySearchMulti'))
function arraySearchMulti($search,$key,$array,$returnKey=false)
foreach ($array as $k => $val)
if (isset($val[$key]))
if ((string)$val[$key] == (string)$search)
return ($returnKey ? $k : $val);
else
return (is_array($val) ? arraySearchMulti($search,$key,$val,$returnKey) : null);
return null;
answered Aug 22 '18 at 22:11
Whendy TakashyWhendy Takashy
246
246
add a comment |
add a comment |
Try this also
function search_in_array($srchvalue, $array)
if (is_array($array) && count($array) > 0)
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE)
foreach ($array as $key => $value)
if (is_array($value) && count($value) > 0)
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE)
return $foundkey;
else
return $foundkey;
add a comment |
Try this also
function search_in_array($srchvalue, $array)
if (is_array($array) && count($array) > 0)
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE)
foreach ($array as $key => $value)
if (is_array($value) && count($value) > 0)
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE)
return $foundkey;
else
return $foundkey;
add a comment |
Try this also
function search_in_array($srchvalue, $array)
if (is_array($array) && count($array) > 0)
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE)
foreach ($array as $key => $value)
if (is_array($value) && count($value) > 0)
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE)
return $foundkey;
else
return $foundkey;
Try this also
function search_in_array($srchvalue, $array)
if (is_array($array) && count($array) > 0)
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE)
foreach ($array as $key => $value)
if (is_array($value) && count($value) > 0)
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE)
return $foundkey;
else
return $foundkey;
answered Oct 14 '14 at 11:50
PravinSPravinS
2,63031624
2,63031624
add a comment |
add a comment |
for( $i =0; $i < sizeof($allUsers); $i++)
$NEEDLE1='firstname';
$NEEDLE2='emailAddress';
$sterm='Tofind';
if(isset($allUsers[$i][$NEEDLE1]) && isset($allUsers[$i][$NEEDLE2])
Print_r($resultsMatched); //will give array for matched values even partially matched
With help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question.
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
add a comment |
for( $i =0; $i < sizeof($allUsers); $i++)
$NEEDLE1='firstname';
$NEEDLE2='emailAddress';
$sterm='Tofind';
if(isset($allUsers[$i][$NEEDLE1]) && isset($allUsers[$i][$NEEDLE2])
Print_r($resultsMatched); //will give array for matched values even partially matched
With help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question.
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
add a comment |
for( $i =0; $i < sizeof($allUsers); $i++)
$NEEDLE1='firstname';
$NEEDLE2='emailAddress';
$sterm='Tofind';
if(isset($allUsers[$i][$NEEDLE1]) && isset($allUsers[$i][$NEEDLE2])
Print_r($resultsMatched); //will give array for matched values even partially matched
With help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question.
for( $i =0; $i < sizeof($allUsers); $i++)
$NEEDLE1='firstname';
$NEEDLE2='emailAddress';
$sterm='Tofind';
if(isset($allUsers[$i][$NEEDLE1]) && isset($allUsers[$i][$NEEDLE2])
Print_r($resultsMatched); //will give array for matched values even partially matched
With help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question.
edited Feb 27 '15 at 17:28
Lorenz Meyer
12.5k195293
12.5k195293
answered Feb 27 '15 at 15:13
sandeep sharmasandeep sharma
1
1
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
add a comment |
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
Please add a phrase to explain why this answers the question
– Lorenz Meyer
Feb 27 '15 at 15:41
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
whit help of above code one can find any(partially matched) data from any column in 2D array so user id can be found as required in question
– sandeep sharma
Feb 27 '15 at 17:16
add a comment |
Expanding on the function @mayhem created, this example would be more of a "fuzzy" search in case you just want to match part (most) of a search string:
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false)
return $key;
return false;
For example the value in the array is Welcome to New York! and you wanted the first instance of just "New York!"
add a comment |
Expanding on the function @mayhem created, this example would be more of a "fuzzy" search in case you just want to match part (most) of a search string:
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false)
return $key;
return false;
For example the value in the array is Welcome to New York! and you wanted the first instance of just "New York!"
add a comment |
Expanding on the function @mayhem created, this example would be more of a "fuzzy" search in case you just want to match part (most) of a search string:
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false)
return $key;
return false;
For example the value in the array is Welcome to New York! and you wanted the first instance of just "New York!"
Expanding on the function @mayhem created, this example would be more of a "fuzzy" search in case you just want to match part (most) of a search string:
function searchArrayKeyVal($sKey, $id, $array)
foreach ($array as $key => $val)
if (strpos(strtolower($val[$sKey]), strtolower(trim($id))) !== false)
return $key;
return false;
For example the value in the array is Welcome to New York! and you wanted the first instance of just "New York!"
edited Sep 21 '16 at 20:40
answered Sep 21 '16 at 20:13
Mike QMike Q
2,59812537
2,59812537
add a comment |
add a comment |
Try this
<?php
function recursive_array_search($needle,$haystack)
foreach($haystack as $key=>$value)
$current_key=$key;
if($needle===$value OR (is_array($value) &&
recursive_array_search($needle,$value) !== false))
return $current_key;
return false;
?>
add a comment |
Try this
<?php
function recursive_array_search($needle,$haystack)
foreach($haystack as $key=>$value)
$current_key=$key;
if($needle===$value OR (is_array($value) &&
recursive_array_search($needle,$value) !== false))
return $current_key;
return false;
?>
add a comment |
Try this
<?php
function recursive_array_search($needle,$haystack)
foreach($haystack as $key=>$value)
$current_key=$key;
if($needle===$value OR (is_array($value) &&
recursive_array_search($needle,$value) !== false))
return $current_key;
return false;
?>
Try this
<?php
function recursive_array_search($needle,$haystack)
foreach($haystack as $key=>$value)
$current_key=$key;
if($needle===$value OR (is_array($value) &&
recursive_array_search($needle,$value) !== false))
return $current_key;
return false;
?>
edited May 26 '17 at 16:10
answered May 26 '17 at 15:39
Maurizio RicciMaurizio Ricci
19217
19217
add a comment |
add a comment |
$search1 = 'demo';
$search2 = 'bob';
$arr = array('0' => 'hello','1' => 'test','2' => 'john','3' => array('0' => 'martin', '1' => 'bob'),'4' => 'demo');
foreach ($arr as $value)
if (is_array($value))
if (in_array($search2, $value))
echo "successsfully";
//execute your code
else
if ($value == $search1)
echo "success";
add a comment |
$search1 = 'demo';
$search2 = 'bob';
$arr = array('0' => 'hello','1' => 'test','2' => 'john','3' => array('0' => 'martin', '1' => 'bob'),'4' => 'demo');
foreach ($arr as $value)
if (is_array($value))
if (in_array($search2, $value))
echo "successsfully";
//execute your code
else
if ($value == $search1)
echo "success";
add a comment |
$search1 = 'demo';
$search2 = 'bob';
$arr = array('0' => 'hello','1' => 'test','2' => 'john','3' => array('0' => 'martin', '1' => 'bob'),'4' => 'demo');
foreach ($arr as $value)
if (is_array($value))
if (in_array($search2, $value))
echo "successsfully";
//execute your code
else
if ($value == $search1)
echo "success";
$search1 = 'demo';
$search2 = 'bob';
$arr = array('0' => 'hello','1' => 'test','2' => 'john','3' => array('0' => 'martin', '1' => 'bob'),'4' => 'demo');
foreach ($arr as $value)
if (is_array($value))
if (in_array($search2, $value))
echo "successsfully";
//execute your code
else
if ($value == $search1)
echo "success";
edited Aug 9 '17 at 9:17
answered Aug 9 '17 at 9:11
BhavyeshBhavyesh
113
113
add a comment |
add a comment |
If question i.e.
$a = [
[
"_id" => "5a96933414d48831a41901f2",
"discount_amount" => 3.29,
"discount_id" => "5a92656a14d488570c2c44a2",
],
[
"_id" => "5a9790fd14d48879cf16a9e8",
"discount_amount" => 4.53,
"discount_id" => "5a9265b914d488548513b122",
],
[
"_id" => "5a98083614d488191304b6c3",
"discount_amount" => 15.24,
"discount_id" => "5a92806a14d48858ff5c2ec3",
],
[
"_id" => "5a982a4914d48824721eafe3",
"discount_amount" => 45.74,
"discount_id" => "5a928ce414d488609e73b443",
],
[
"_id" => "5a982a4914d48824721eafe55",
"discount_amount" => 10.26,
"discount_id" => "5a928ce414d488609e73b443",
],
];
Ans:
function searchForId($id, $array)
$did=0;
$dia=0;
foreach ($array as $key => $val)
if ($val['discount_id'] === $id)
$dia +=$val['discount_amount'];
$did++;
if($dia != '')
echo $dia;
var_dump($did);
return null;
;
print_r(searchForId('5a928ce414d488609e73b443',$a));
add a comment |
If question i.e.
$a = [
[
"_id" => "5a96933414d48831a41901f2",
"discount_amount" => 3.29,
"discount_id" => "5a92656a14d488570c2c44a2",
],
[
"_id" => "5a9790fd14d48879cf16a9e8",
"discount_amount" => 4.53,
"discount_id" => "5a9265b914d488548513b122",
],
[
"_id" => "5a98083614d488191304b6c3",
"discount_amount" => 15.24,
"discount_id" => "5a92806a14d48858ff5c2ec3",
],
[
"_id" => "5a982a4914d48824721eafe3",
"discount_amount" => 45.74,
"discount_id" => "5a928ce414d488609e73b443",
],
[
"_id" => "5a982a4914d48824721eafe55",
"discount_amount" => 10.26,
"discount_id" => "5a928ce414d488609e73b443",
],
];
Ans:
function searchForId($id, $array)
$did=0;
$dia=0;
foreach ($array as $key => $val)
if ($val['discount_id'] === $id)
$dia +=$val['discount_amount'];
$did++;
if($dia != '')
echo $dia;
var_dump($did);
return null;
;
print_r(searchForId('5a928ce414d488609e73b443',$a));
add a comment |
If question i.e.
$a = [
[
"_id" => "5a96933414d48831a41901f2",
"discount_amount" => 3.29,
"discount_id" => "5a92656a14d488570c2c44a2",
],
[
"_id" => "5a9790fd14d48879cf16a9e8",
"discount_amount" => 4.53,
"discount_id" => "5a9265b914d488548513b122",
],
[
"_id" => "5a98083614d488191304b6c3",
"discount_amount" => 15.24,
"discount_id" => "5a92806a14d48858ff5c2ec3",
],
[
"_id" => "5a982a4914d48824721eafe3",
"discount_amount" => 45.74,
"discount_id" => "5a928ce414d488609e73b443",
],
[
"_id" => "5a982a4914d48824721eafe55",
"discount_amount" => 10.26,
"discount_id" => "5a928ce414d488609e73b443",
],
];
Ans:
function searchForId($id, $array)
$did=0;
$dia=0;
foreach ($array as $key => $val)
if ($val['discount_id'] === $id)
$dia +=$val['discount_amount'];
$did++;
if($dia != '')
echo $dia;
var_dump($did);
return null;
;
print_r(searchForId('5a928ce414d488609e73b443',$a));
If question i.e.
$a = [
[
"_id" => "5a96933414d48831a41901f2",
"discount_amount" => 3.29,
"discount_id" => "5a92656a14d488570c2c44a2",
],
[
"_id" => "5a9790fd14d48879cf16a9e8",
"discount_amount" => 4.53,
"discount_id" => "5a9265b914d488548513b122",
],
[
"_id" => "5a98083614d488191304b6c3",
"discount_amount" => 15.24,
"discount_id" => "5a92806a14d48858ff5c2ec3",
],
[
"_id" => "5a982a4914d48824721eafe3",
"discount_amount" => 45.74,
"discount_id" => "5a928ce414d488609e73b443",
],
[
"_id" => "5a982a4914d48824721eafe55",
"discount_amount" => 10.26,
"discount_id" => "5a928ce414d488609e73b443",
],
];
Ans:
function searchForId($id, $array)
$did=0;
$dia=0;
foreach ($array as $key => $val)
if ($val['discount_id'] === $id)
$dia +=$val['discount_amount'];
$did++;
if($dia != '')
echo $dia;
var_dump($did);
return null;
;
print_r(searchForId('5a928ce414d488609e73b443',$a));
answered Mar 13 '18 at 9:42
Yuvraj Singh ShekhawatYuvraj Singh Shekhawat
7013
7013
add a comment |
add a comment |
interestingly the underscore (and lowdash) librarires add this function to javascript...
– ErichBSchulz
Mar 7 '14 at 12:37
6
I wrote a script to test the performance of a few of the answers. It generates a 500k-member array of arrays and searches through it for a value in the last member. I compared a function like the accepted answer, to the two
array_column
one-liner answers. I modified them all to return the actual discovered array, not just the key, because usually that's my use case. The function method scored 0.361, search-col 0.184 and keys-col 0.189 average micro delay over 1000 runs for each method.– Josh
Feb 14 '16 at 12:49