奇怪的功能,从txt列出国家

时间:2013-05-26 18:01:28

标签: php

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

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 ..

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

1 个答案:

答案 0 :(得分: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;
}

你很好。