2013-03-16 82 views
0

我有一个这样的阵列,它是自动构建的,并且在长度中动态构建。检查数组值是否从另一个数组值设置PHP?

$arr = array('k1','k2','k3','k4',); 

而且我有一个已经存在的数组$exArr,我怎么能检查动态下同这样做;

if($exArr[$arr[0]][$arr[1]][$arr[2]][$arr[3]]) echo 'IT EXISTS'; 

请记住,动态构建的阵列可能只有一个或多达10个连续的键来检查。

由于

EDIT

为了更清楚我有一个数组是动态的,但将仅包含值。它可以是任何长度。

动态构建的数组对应于另一个数组的键,我需要一种方法来检查动态构建数组中的所有值是否正确并指向一个值,例如:

$dynamic = array('one', 'two', 'three'); 

$existing = array('one' => array('two' => array('three' => array(true)))); 

以上将评估为true下面的语句是正确的,

if($existing[$dynamic[0]][$dynamic[1]][$dynamic[2]]) echo 'WOO'; 

我遇到的麻烦的是,动态数组就是这样!它可能是一个长度或50个。因此,有一个简单的旧if语句不会在这里工作。

再次感谢

+0

你试过'in_array'吗? – tradyblix 2013-03-16 04:45:12

+0

或'count'? http://php.net/manual/en/function.count.php – 2013-03-16 04:45:38

+0

你想检查存储在数组中的所有特定值吗? – kirugan 2013-03-16 04:46:33

回答

1
<?php 
$dynamic = array('one', 'two', 'three'); 

$existing = array('one' => array('two' => array('three' => array(true)))); 

function check($dynamic, $existing) { 
    foreach ($dynamic as $key) { 
     if (!isset ($existing [$key])) { 
        // return false; 
      throw new Exception("{$key}"); 
     } 
     $existing = $existing [$key]; 
    } 
    return true; 
} 

try { 
    check($dynamic, $existing); 
} catch (exception $e) { 
    echo "Invalid! On key: {$e->getMessage()}\n\n"; exit; 
} 

echo "Valid if it gets here!\n\n"; 

$dynamic = array('one', "invalid", 'two', 'three'); 

try { 
    check($dynamic, $existing); 
} catch (exception $e) { 
    echo "Invalid! On key: {$e->getMessage()}\n\n"; exit; 
} 

echo "Valid if it gets here!\n\n"; 

测试:http://eval.in/12819

,可随时更换掷回假

+0

与此问题的数据应该是在$存在数组中的键相同的顺序... – Cito 2013-03-16 05:17:57

+0

这太棒了!非常感谢,如果数据的顺序不正确,我希望它无论如何返回false!再次感谢。 – Griff 2013-03-16 05:19:28

0

这个搜索通过多维数组钥匙在你的独特阵列A.发现的关键是存储在数组C.希望这会有所帮助。

<?php 

$arrayA = array("a", "b", "c", "h", "p"); 

$arrayB = array("a" => array("g" => array("c" => array("d" => "x")))); 
$arrayC = array(); 

function searchKeys($array) { 
    global $arrayA; 
    global $arrayC; 

    foreach ($array as $key => $value) { 

     if (in_array($key, $arrayA)) { 
      $arrayC[] = $key; 
     } 

     if (is_array($value)) { 
       searchKeys($value); 
     } 

    } 
} 

searchKeys($arrayB, $arrayA); 
print_r($arrayC); 
?> 
+0

但是对于这种解决方案,对于每个子阵列,您应该添加一个子排除... – Cito 2013-03-16 05:19:54

+0

我已经更改了代码以搜索多维领域中的键。希望这更适合你。 – Daniel 2013-03-16 06:04:28

+0

我对“全局”变量感到畏惧。你的代码是成为迷你类的最佳人选,全局变量是类属性。 jmho。 Tou甚至可以在方法中键入提示传递的变量作为数组,以获得更美观的代码。大声笑 – keyboardSmasher 2013-03-16 06:16:45

相关问题