从* .txt文件插入数据到assoc数组中

问题描述 投票:0回答:1

我有一个文本文件'test.txt',其中的水果名称及其科学名称用单独的行表示。

我想创建一个数组为

$FRUIT_NAME ( fruit1=>"apple, 
              SNfruit1=>"Pyrus malus",  
              fruit2=>"mango", 
              SNfruit2=>"Mangifera indica"  ...  )

但是,我在SNfruit1SNfruit2中得到空白值。

这里是'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>';  
php arrays associative-array key-value
1个回答
0
投票

重新编写中间的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]);
}

$SN=str_replace('"',"",$LINK[1]);

$SN= trim(str_replace('"',"",$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

问题出在truefalse部分。

true中,您对错误的元素进行了str_replace,这就是为什么您收到"apple之类的值而不是干净的apple的原因。

false部分中您没有trim,这就是索引不正确的原因,因此您的$FRUIT_NAME的构建不正确。

注意: echo '============================================'.'<br>';

© www.soinside.com 2019 - 2024. All rights reserved.