我有一个文本文件'test.txt'
,其水果名及其科学名称用不同的行表示。
我想创建一个数组
$FRUIT_NAME ( fruit1=>"apple,
SNfruit1=>"Pyrus malus",
fruit2=>"mango",
SNfruit2=>"Mangifera indica" ... )
但是,我在SNfruit1
,SNfruit2
中得到了空白值。
这里是'test.txt'
SNapple="Pyrus malus"
SNmango="Mangifera indica"
SNbanana="Musa paradisicum"
SNorange="Citrus aurantium"
SNDefault="No SN"
fruit1="apple|$SNapple"
fruit2="mango|$SNmango"
fruit3="banana|$SNbanana"
fruit4="orange|$SNorange"
veg1="potato"
veg2="cauliflower"
这是代码文件'test.php'
:
$lines=explode("\n", file_get_contents('test.txt'));
$FRUIT_NAME=[] ;
$result=[];
for($i=0; $i<count($lines); $i++)
{ if (strpos($lines[$i], '=') !== false)
{
$link = explode('=', $lines[$i], 2);
if (strpos(substr($lines[$i], 0, 2), 'SN') !== false)
$result[str_replace('"',"",$link[0])] = $link[1];
else
{ $FName=$link[1];
if (strpos($link[1], '|') !== false)
{
$LINK = explode('|$', $link[1]);
$FName=$LINK[0];
$SN=str_replace('"',"",$LINK[1]);
}
else $SN="SNDefault" ;
$FRUIT_NAME[$link[0]] = $FName ;
//$FRUIT_NAME["SN".$link[0]] = $SN ;
$FRUIT_NAME['SN'.$link[0]] = $result[$SN] ;
}
}
}
foreach ($result as $key => $value) echo "$key::$value".'<br>';
echo '============================================';
foreach ($FRUIT_NAME as $key => $value) echo "$key::$value".'<br>';
答案 0 :(得分:1)
重新编写中间的if-else
语句:
if (strpos(substr($lines[$i], 0, 2), 'SN') !== false)
$result[str_replace('"',"",$link[0])] = $link[1];
else
与
if (strpos(substr($lines[$i], 0, 2), 'SN') !== false){
$result[$link[0]] = str_replace('"',"",$link[1]);
}
和
$FName=$link[1];
if (strpos($link[1], '|') !== false) {
$LINK = explode('|$', $link[1]);
$FName=$LINK[0];
$SN=str_replace('"',"",$LINK[1]);
} else $SN="SNDefault" ;
$FRUIT_NAME[$link[0]] = $FName ;
$FRUIT_NAME['SN'.$link[0]] = $result[$SN] ;
与
$link[1] = str_replace('"','',$link[1]);
if (strpos($link[1], '|$') !== false) {
$sublink = explode('|$', $link[1]);
$FRUIT_NAME[$link[0]] = $sublink[0];
$FRUIT_NAME["SN".$link[0]] = $result[trim($sublink[1])];
} else {
$FRUIT_NAME[$link[0]] = $link[1] ;
}
那么输出将是:
SNapple::Pyrus malus
SNmango::Mangifera indica
SNbanana::Musa paradisicum
SNorange::Citrus aurantium
SNDefault::No SN
============================================
fruit1::apple
SNfruit1::Pyrus malus
fruit2::mango
SNfruit2::Mangifera indica
fruit3::banana
SNfruit3::Musa paradisicum
fruit4::orange
SNfruit4::Citrus aurantium
veg1::potato
veg2::cauliflower
问题出在true
和false
部分。
在true
中,您输入了错误的元素str_replace
,这就是为什么您收到诸如"apple
之类的值而不是干净的apple
的原因。
在false
部分,您没有trim
,这就是索引不正确的原因,因此您的$FRUIT_NAME
的构建不正确。
注意: echo '============================================'.'<br>';