我有问题,我无法解释, 首先这是我的功能
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我不知道为什么??
答案 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;
}
你很好。