字符串和数组不像我想象的那样工作


Strings and Arrays not working like I thought

我正在尝试了解有关字符串和数组的更多信息。 我有这段代码:

<?php
$states = "OH, VA, GA";
$arrayStates = explode(",", $states);
$exists = "GA";
print_r($arrayStates);
if (in_array($exists, $arrayStates)){
    echo "<br/>" . $exists . " " . "exists.";
} else {
    echo "<br/>" . $exists . " " . "doesn't exist.";
}
?>

根据我微弱的头脑,GA 应该存在于数组中。 如果我输入$exists = "OH",那就行了。 但是屏幕显示的是:

Array ( [0] => OH [1] => VA [2] => GA ) 

GA 不存在。

我在这里有什么不明白的?

数组包含字符串" GA",第一个字符为空格。这不等于没有空格的"GA"。

您应该对数组的每个元素使用 explode(", "), $states) 或调用 trim()

$arrayStates = array_map('trim', explode(",", $states));
您需要在

逗号后用空格爆炸。

$arrayStates = explode(", ", $states);

你正在与,分割,但你的文本有空格,所以拆分后你有:

数组 ( [0] => OH [1] => _VA [2] => _GA

您可以按,_拆分(将下划线替换为空格)

或者,您可以在拆分后修剪所有值,例如:

foreach ($arrayStates as $k => $v) $arrayStates[$k] = trim($v);

那是因为它被,除以,所以你的数组内容是:

Array
(
    [0] => OH
    [1] =>  VA
    [2] =>  GA
)

你需要做$arrayStates = explode(", ", $states);

在应用爆炸(...)后的$arrayStates中,您有:

$arrayStates[0] stores "OH"
$arrayStates[1] stores " VA"
$arrayStates[2] stores " GA"

请注意,在索引 2 处,数组存储的是"GA"(注意空格)而不是"GA",这是因为在爆炸函数中使用","。要让你的代码按照你想要的方式工作,你应该在爆炸函数中使用 ", "(注意空格)

explode 方法仅拆分逗号 ","上的字符串,并且不删除空格。结果,您最终将"GA"(您的$exists)与" GA"(数组内部,请注意空格)进行比较=]