【问题标题】:Inserting data from *.txt file into assoc array将 *.txt 文件中的数据插入 assoc 数组
【发布时间】:2020-04-06 14:09:59
【问题描述】:

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

    重写你中间的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 '============================================'.'&lt;br&gt;';

    【讨论】:

    • 谢谢。在$FRUIT_NAME['SN'.$link[0]] = $result[trim($SN)] ; 中使用修剪功能有效。
    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多