0

我有一个问题,我无法解释,首先这是我的功能

function list_countries($id,$name=null,$result=null){
    $countries = 'countries.txt';
    $selected = '';
    echo  '<select name="'.$name.'" id="'.$id.'">';
    echo '<option disabled>طالب الغد</option>';
    if(file_exists($countries)){
        if(is_readable($countries)){
            $files = file_get_contents($countries);
            $files = explode('|',$files);
            foreach($files AS $file){
                $value = sql_safe($file);
                if(strlen($value) < 6){
                    echo '<option disabled>'.$value.'</option>';
                }else{
                    if($value == $result){
                        $selected = ' selected="selected" ';
                    }
                    echo '<option value="'.$value.'".$selected.'>'.$value.'</option>';
                }
            }
        }else{
            echo 'The file is nor readable !';
        }
    }else{
        echo "The file is not exist !";
    }
    echo '</select>';
}

现在解释我有一个文本文件包括一个用“|”分隔的国家名称 在这个文件中,国家之前有一个标题,我的意思是像这样

U|United Kingdom|United State|UAE etc ..
L|Liberia|Libya  etc ..

现在功能做什么是禁用标题,它总是一个字符..但是 strlen 函数给我的最小数字是 5 而不是一个 ..” 这是第一个问题 $result 中的第二个从未等于$value 和 ether 我不知道为什么?

4

1 回答 1

1

您需要将文件拆分两次,一份用于行,一份用于国家/地区。

此外,由于您的“国家/地区标题”始终是每行的第一项,因此您无需使用strlen. 只需移出每行集的第一项:一项是标题,以下是国家/地区。

像这样的东西。

请注意,在您的代码中echo,输出值存在语法错误,该>符号实际上位于引号之外。

function list_countries($id,$name=null,$result=null){
    $countries = 'countries.txt';
    $selected  = '';
    $text  = '<select name="'.$name.'" id="'.$id.'">';
    $text .= '<option disabled>ﻁﺎﻠﺑ ﺎﻠﻏﺩ</option>';
    if(file_exists($countries)){
        if(is_readable($countries)){
            $list = file($countries);
            foreach($list as $item){
                $item = trim($item);
                $opts = explode('|', $item);
                // The first item is the header.
                $text .= "<option disabled>$opts[0]</option>";
                array_shift($opts);
                foreach($opts as $opt)
                {
                        $value = sql_safe($opt);
                        $text .= '<option';
                        if($value == $result)
                                $text .= ' selected="selected"';
                        $text .= ' value="'.$value.'"';
                        $text .= '>'.$value."</option>\n";
                }
            }
        }else{
            $text .= "The file is not readable!";
        }
    }else{
        $text .= "The file does not exist!";
    }
    $text .= '</select>';
    return $text;
}

我稍微修改了您的代码,以便该函数实际上返回要输出的文本而不是回显它;这使得可重用性更高。要使上述函数的行为与您的一样,只需return

    echo $text;
}

你很好。

于 2013-05-26T18:18:00.227 回答