0

我有一个这样的数组,它是自动构建的,并且长度是动态的。

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

而且我有一个已经存在的数组$exArr,如何动态检查与下面的操作相同;

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

请记住,动态构建的数组可能只有一个或多达 10 个以上的顺序键要检查。

谢谢

编辑

更清楚地说,我有一个动态的数组,但只包含值。它可以是任何长度。

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

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

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

以上将评估为真,因为以下陈述是正确的,

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

我遇到的麻烦是动态数组就是这样!它的长度可能是 1 或 50。因此,在这里使用普通的旧 if 语句是行不通的。

再次感谢

4

2 回答 2

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

您可以将 throw 替换为 return false

于 2013-03-16T05:16:15.183 回答
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);
?>
于 2013-03-16T05:16:38.930 回答