我正在尝试构建一个函数来检查数组中特定位置是否有值:
function ($array, $key) {
if (isset($array[$key]) {
return true;
}
return false;
}
但是如何在多阵列中完成此操作?说我想检查$array[test1][test2]
答案 0 :(得分:1)
传递一组键,然后递归到你沿途找到的物体:
function inThere($array, $keys)
{
$key = $keys; // if a single key was passed, use that
$rest = array();
// else grab the first key in the list
if (is_array($keys))
{
$key = $keys[0];
$rest = array_slice($keys, 1);
}
if (isset($array[$key]))
{
if (count($rest) > 0)
return inThere($array[$key], $rest);
else
return true;
}
return false;
}
所以,对于:
$foo = array(
'bar' => array( 'baz' => 1 )
);
inThere($foo, 'bar'); // == true
inThere($foo, array('bar')); // == true
inThere($foo, array('bar', 'baz')); // == true
inThere($foo, array('bar', 'bazX')); // == false
inThere($foo, array('barX')); // == false
答案 1 :(得分:0)
这是一种检查是否设置了多级哈希表的非递归方法。
// $array it the container you are testing.
// $keys is an array of keys that you want to check. [key1,key2...keyn]
function ($array, $keys) {
// Is the first key set?
if (isset($array[$key]) {
// Set the test to the value of the first key.
$test = $array[$key];
for($i = 1; $i< count($keys); $i++){
if (!isset($test[$keys[$i]]) {
// The test doesn't have a matching key, return false
return false;
}
// Set the test to the value of the current key.
$test = $test[$keys[$i]];
}
// All keys are set, return true.
return true;
} else {
// The first key doesn't exist, so exit.
return false;
}
}
答案 2 :(得分:0)
我出去了,但也许是这样。 $ keys应该是一个数组,即使是一个,但你可以改变代码来检查一个键数组或只有一个:
function array_key_isset($array, $keys) {
foreach($keys as $key) {
if(!isset($array[$key])) return false;
$array = $array[$key];
}
return true;
}
array_key_isset($array, array('test1','test2'));
答案 3 :(得分:0)
有更普遍的方法,但最初可能看起来很奇怪: 这里我们使用array_walk_recursive和一个闭包函数:
$array = array('a', 'b', array('x', 456 => 'y', 'z'));
$search = 456; // search for 456
$found = false;
array_walk_recursive($array, function ($value, $key) use ($search, &$found)
{
if ($key == $search)
$found = true;
});
if ($found == true)
echo 'got it';
唯一的缺点是它会遍历所有值,即使它已经找到了密钥。这虽然适用于小阵列
答案 4 :(得分:0)
虽然我可能不会为此构建一个函数,但也许你可以更好地使用它:
<?php
function mda_isset( $array )
{
$args = func_get_args();
unset( $args[0] );
if( count( $args ) > 0 )
{
foreach( $args as $x )
{
if( array_key_exists( $x, $array ) )
{
$array = $array[$x];
}
else
{
return false;
}
}
if( isset( $array ) )
{
return true;
}
}
return false;
}
?>
您可以根据需要添加任意数量的参数:
// Will Test $array['Test1']['Test2']['Test3']
$bool = mda_isset( $array, 'Test1', 'Test2', 'Test3' );
首先检查以确保数组键存在,将数组设置为该键,然后检查下一个键。如果找不到密钥,则表示它不存在。如果找到所有键,则检查该值是否已设置。