你知道如何测试,一个索引,基于我们传递给字符串,是否存在于数组中?
假设以下代码:
<?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;
}
?>