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

时间:2019-12-13 06:26:11

标签: php arrays associative-array key-value

我有一个文本文件'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>';  

1 个答案:

答案 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

问题出在truefalse部分。

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

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

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