簡體   English   中英

檢查字符串中數組中的索引是否存在

[英]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;
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM