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

Inserting data from *.txt file into assoc array

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

重写你的中间 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>';