我的PHP foreach命令仅作用于数组的最后一项!

| 我从文本字段获取输入,将每一行变成数组中的值,然后使用foreach循环运行搜索并替换每个值。代码如下:
$countryinp = trim($_POST[\'country\']);
$countryinp = explode(\"\\n\", $countryinp);
$countryinp = array_filter($countryinp, \'trim\');
foreach($countryinp as $code)
{
$country = \'\';
if( $code == \'Afghanistan\' ) $country = \'AF\';
if( $code == \'Aland Islands\' ) $country = \'AX\';
if( $code == \'Albania\' ) $country = \'AL\';
if( $code == \'Algeria\' ) $country = \'DZ\';
...
if( $country == \'\') $country = $code;
echo \"$country\";
echo \"<br />\";
unset($code);
}
该代码将循环并输出所有输入的列表,但是对于输入的最后一行,它仅将
$country
设置为两个字母的代码!我快疯了,以前有人看过吗?     
已邀请:
您到底有什么问题?您说它仅将
$country
设置为最后一行的两个字母的代码,但是它会打印出之前的所有代码吗? 这应该很明显,但是如果循环结束后ѭ1value的值仅存在问题,那么您应该意识到
$country
变量在循环的每次迭代中都会被覆盖,因此将仅保留循环结束时的最后一次迭代。 如果问题是您的循环未打印每个代码,则听起来像是数据问题,您需要向我们显示数组中的值才能确定问题。 您可能遇到的一种数据问题是以下行:
$countryinp = array_filter($countryinp, \'trim\');
我认为这行的目的是将
trim
函数应用于数组中的每个元素,但这并不是
array_filter
所做的。 ѭ7'的功能是将数组中的每个元素传递给回调函数。该函数检查元素的内容,如果应保留内容,则返回“ 9”,如果应从数组中过滤出该元素,则返回“ 10”。 当您将
trim
传递给
array_filter
时,唯一发生的是将删除任何为空或仅包含空格的数组元素。这是因为修剪此类元素后,它们为空。 PHP将空字符串解释为
false
,并将其从数组中删除。 这可能会导致您的
if
语句出现问题,因为如果
$code
包含例如\“ Afghanistan \”(请注意末尾的空格),则它不会被
if
语句捕获,因为字符串不匹配。 您只需在
foreach
循环的开头运行running17ѭ行,就会更好。 另外,您的代码对我来说有点难看。如果您要一遍又一遍地检查相同的变量(即重复的
if ($code == \'Value\')
语句),那么您实际上应该使用
switch
语句:
switch ($code) {
    case \"Afghanistan\":
        $country = \'AF\';
        break;
    case \"Aland Islands\":
        $country =\'AX\';
        break;
    // repeat for other cases
    default:
        $country = $code;
}
    
试试这样的东西...
foreach($countryinp as $code)
{
$code = trim($code);
    switch($code){
        case \"Afganistan\": $country = \"AF\"; break;
        case \"Alanad Islands\": $country = \"AX\"; break;
        default: $country = $code;
    }

    echo $country.\"<br />\";
}
并确保您的数据存在...     
这段代码可能会引发太多逻辑问题
foreach($countryinp as $code) // #1
{
$country = \'\'; // #2
if( $code == \'Afghanistan\' ) $country = \'AF\'; // #3
if( $code == \'Aland Islands\' ) $country = \'AX\';
if( $code == \'Albania\' ) $country = \'AL\';
if( $code == \'Algeria\' ) $country = \'DZ\';
...
if( $country == \'\') $country = $code; #4
echo \"$country\";
echo \"<br />\";
unset($code); // #5
}
$ code是在foreach中可见的变量 范围,赋值为 next($ countryinp)(指向下一个的指针) 数组中的元素) $ country重置为\'\'(空 值),每次迭代(您是 重置$ country值) $ code == \'xxxx \'-在这里您可以使用 switch()语句有两个好处:1) 表达式仅计算一次 然后匹配\'case \'和2) 可维护性(如果必须 更改代码中的内容... 更好的解决方案是简单地 具有国家名称为键的数组 和国家/地区代码作为值,那么您 可以直接访问国家代码 像这样 $ countryCodes [$ countryName]; 在这里分配当前国家 仅在$ country时将$ code转换为$ country 是空的,但在#2中提到了 正在重置每个国家/地区的美元价值 迭代 在这里您取消设置$ code的值 这是没有必要的,$ code是 仅在foreach()和 代码自动取消设置 存在foreach循环。 希望能有所帮助。 :)     

要回复问题请先登录注册