检查数组中的索引是否存在


Check if index in array exists from string

你知道如何测试,一个索引,基于我们传递给字符串,是否存在于数组中?

假设以下代码:

<?php
$myArray = [
    "elemOne" => "valueElemOne",
    "elemTwo" => [
        "elemTwoOne" => "valueElemTwoOne",
        "elemTwoTwo" => [
            "elemThreeOne" => "valueElemThreeOne",
            "elemThreeTwo" => "valueElemThreeTwo",
        ],
    ],
];

现在,我有一个字符串$myString = "elemTwo/elemTwoTwo/elemThreeThree"。我想对$myString做一些格式化,这样我就可以检查

<?php
if(isset($myArray['elemTwo']['elemTwoTwo']['elemThreeThree'])) {
    // maybe do something
    return true;
} else {
    return false;
}

在我的情况下,这自然会返回false,因为索引"elemThreeThree"不存在于我的数组中。我试着分割字符串,试着格式化为[elemTwo][elemTwoTwo][elemThreeThree],然后评估它,但没有真正工作。

你能想到一个可能的方法来帮助我吗?

简单的解决方案是

  <?php
     $arr = array('hello'=>array('world'=>array('in'=>'jo')));
     $myString = "hello/world/inf";
     function checkString($string, array $search_array) {
        $test = explode('/',$string);
        foreach($test as $key) {
           if(isset($search_array[$key])) $search_array = $search_array[$key];
           else return false;
        }
        return true;
     }
     var_dump(checkString($myString,$arr));
     die;

函数的输出将为true或false

为什么拆分不工作?这有什么问题吗?

<?php
$arrayTest = array(
    "arrayOne" => "string", 
    "arrayTwo" => array(
        "arrayThree"    => "string",
        "arrayFour"     => array("winner" => "me")
    )
);
var_dump(expanded_key_exists($arrayTest, "arrayOne"));
var_dump(expanded_key_exists($arrayTest, "arrayTwo"));
var_dump(expanded_key_exists($arrayTest, "arrayTwo/arrayThree"));
var_dump(expanded_key_exists($arrayTest, "arrayTwo/arrayThree/arrayTwenty"));
var_dump(expanded_key_exists($arrayTest, "arrayTwo/arrayFour"));
var_dump(expanded_key_exists($arrayTest, "arrayTwo/arrayFour/winner"));
if(expanded_key_exists($arrayTest, "arrayTwo/arrayFour/winner")){
    echo "The winner is: " . expanded_array_key($arrayTest, "arrayTwo/arrayFour/winner");
}
function expanded_key_exists($array, $key){
    $arrayKeys = explode("/", $key);
    foreach($arrayKeys as $someKey){
        if(is_array($array) && array_key_exists($someKey, $array)){
            $array = $array[$someKey];
        }else{
            return false;
        }
    }
    return true;
}
function expanded_array_key($array, $key){
    $arrayKeys = explode("/", $key);
    foreach($arrayKeys as $someKey){
        if(is_array($array) && array_key_exists($someKey, $array)){
            $array = $array[$someKey];
        }else{
            return null;
        }
    }
    return $array;
}
?>