Dar*_*ney 20 php arrays multidimensional-array
我有一个多维数组,例如(这可能是很多级别):
$array = Array (
[21] => Array ( )
[24] => Array (
[22] => Array ( )
[25] => Array (
[26] => Array ( )
)
)
)
Run Code Online (Sandbox Code Playgroud)
我试图循环它,看看是否存在某个键:
$keySearch = 22; // key searching for
function findKey($array, $keySearch) {
foreach ($array as $item){
if (isset($item[$keySearch]) && false === findKey($item[$keySearch], $item)){
echo 'yes, it exists';
}
}
}
findKey($array, $keySearch);
Run Code Online (Sandbox Code Playgroud)
但它一无所获.循环中是否有错误?
Tim*_*Tim 41
array_key_exists()
是有帮助的.
然后这样的事情:
function multiKeyExists(array $arr, $key) {
// is in base array?
if (array_key_exists($key, $arr)) {
return true;
}
// check arrays contained in this array
foreach ($arr as $element) {
if (is_array($element)) {
if (multiKeyExists($element, $key)) {
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
工作示例:http://codepad.org/GU0qG5su
Ale*_*era 33
我玩了你的代码让它工作:
function findKey($array, $keySearch)
{
foreach ($array as $key => $item) {
if ($key == $keySearch) {
echo 'yes, it exists';
return true;
} elseif (is_array($item) && findKey($item, $keySearch)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
kno*_*t22 10
这是一个单行解决方案:
echo strpos(json_encode($array), $key) > 0 ? "found" : "not found";
Run Code Online (Sandbox Code Playgroud)
这会将数组转换为包含等效 JSON 的字符串,然后使用该字符串作为 strpos() 函数的 haystack 参数,并使用 $key 作为needle 参数($key 是要在 JSON 字符串中查找的值)。
这样做有助于查看转换后的字符串: echo json_encode($array);
确保用单引号和双引号括起针参数,因为 JSON 字符串中名称/值对的名称部分将用双引号括起来。例如,如果在下面的数组中查找 22$key = '"22"'
则将给出在此数组中找不到的正确结果:
$array =
Array (
21 => Array ( ),
24 =>
Array (
522 => Array ( ),
25 =>
Array (
26 => Array ( )
)
)
);
Run Code Online (Sandbox Code Playgroud)
但是,如果不使用单引号,$key = "22"
则上面的数组将导致found的错误结果。
编辑:进一步的改进是搜索是否存在数组中$key = '"22":';
的值"22"
。IE。27 => "22"
此外,这种方法不是防弹的。如果任何数组的值包含字符串,则可能会导致错误的发现'"22":'
function findKey($array, $keySearch)
{
// check if it's even an array
if (!is_array($array)) return false;
// key exists
if (array_key_exists($keySearch, $array)) return true;
// key isn't in this array, go deeper
foreach($array as $key => $val)
{
// return true if it's found
if (findKey($val, $keySearch)) return true;
}
return false;
}
// test
$array = Array (
21 => Array ( 24 => 'ok' ),
24 => Array (
22 => Array ( 29 => 'ok' ),
25 => Array (
26 => Array ( 32 => 'ok' )
)
)
);
$findKeys = Array(21, 22, 23, 24, 25, 26, 27, 28, 29, 30);
foreach ($findKeys as $key)
{
echo (findKey($array, $key)) ? 'found ' : 'not found ';
echo $key.'<br>';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
75535 次 |
最近记录: |