为了账号安全,请及时绑定邮箱和手机立即绑定

如何在php中的while循环内分配数组

如何在php中的while循环内分配数组

PHP
呼如林 2021-11-13 16:46:28
我正在尝试从 .txt 文件中逐行读取值,然后将其存储在数组中,以便稍后在我的程序中使用这些值。问题是,当我在循环内打印数组时,它打印得很好,但是当我尝试在循环外打印它时,它不打印任何内容。txt文件:I/P 电压:212.0I/P 故障电压:212.0O/P 电压:212.0O/P 电流:000I/P 频率:50.0电池电压:13.7温度:28.0UPS 状态:00001001我的代码:数组名称是 $UPS_respond<?php# -----------------------------------------------------# Read value from file# -----------------------------------------------------    $i      = 0 ;    $file   = fopen("/usr/local/bin/UpsResult.txt","r"); //i open my file to read it    $dot    = 0;    while( !feof( $file ) ) {        $y      = fgets($file);        $dot    = strpos($y,':')+1;         $x      = substr($y, $dot);        $UPS_respond = array($i => $x);        echo "inside of Loop => ".'$UPS_respond['.$i.'] :'.$UPS_respond[$i]."<br>";         $i++;    }    fclose( $file );    echo "Ouside of Loop => ".$UPS_respond[$i]."<br>";?>结果:inside of Loop => $UPS_respond[0] : 213.5 inside of Loop => $UPS_respond[1] : 213.5 inside of Loop => $UPS_respond[2] : 213.0 inside of Loop => $UPS_respond[3] : 000 inside of Loop => $UPS_respond[4] : 50.0 inside of Loop => $UPS_respond[5] : 13.7 inside of Loop => $UPS_respond[6] : 28.0 inside of Loop => $UPS_respond[7] : 00001001Ouside of Loop => 
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

你能试试下面的方法吗?希望它可以帮助你。


<?php

# -----------------------------------------------------

# Read value from file

# -----------------------------------------------------


    $i      = 0 ;

    $file   = fopen("/usr/local/bin/UpsResult.txt","r"); //i open my file to read it

    $dot    = 0;

    $result_arr = [];

    while( !feof( $file ) ) {

        $y      = fgets($file);

        $dot    = strpos($y,':')+1; 

        $x      = substr($y, $dot);

        $result_arr[] = $x;

        // $UPS_respond = array($i => $x);

        // echo "inside of Loop => ".'$UPS_respond['.$i.'] :'.$UPS_respond[$i]."<br>"; 

        $i++;

    }

    fclose( $file );

    //echo "<pre>Ouside of Loop => ".$UPS_respond[$i]."<br>";

    echo "<pre>Ouside of Loop => "; print_r( $result_arr );


?>

结果会是这样的:


Ouside of Loop => Array

(

    [0] =>  212.0


    [1] =>  212.0


    [2] =>  212.0


    [3] =>  000


    [4] =>  50.0


    [5] =>  13.7


    [6] =>  28.0


    [7] =>  00001001

)


查看完整回答
反对 回复 2021-11-13
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

原答案:


您可以使用以下方法使事情变得更容易。使用file()和explode()PHP 函数读取文件内容并解析每一行的内容。


<?php

// Read file

$UPS_respond = file('UpsResult.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);


// Output

foreach ($UPS_respond as $line) {

    $a = explode(':', $line);

    echo "Item info: ".$a[0]." : ".$a[1]."<br>"; 

};

?>

输出:


Item info: I/P voltage : 212.0

Item info: I/P fault voltage : 212.0

Item info: O/P voltage : 212.0

Item info: O/P current : 000

Item info: I/P frequency : 50.0

Item info: Battery voltage : 13.7

Item info: Temperature : 28.0

Item info: UPS Status : 00001001

更新:


如果您只想获取部分行,请使用下一种方法。脚本中出现错误的原因是您需要在$UPS_respond数组中添加一个$UPS_respond[] = ...;.


<?php

// Read file

$file = file('UpsResult.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);


// Output

$UPS_respond = array();

foreach ($file as $line) {

    $a = explode(':', $line);

    $UPS_respond[] = $a[1];

};

var_dump($UPS_respond);

// ?>


查看完整回答
反对 回复 2021-11-13
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您必须$UPS_respond = []while循环之前添加。你也必须改变

$UPS_respond = array($i => $x);

$UPS_respond[$i] = $x;

这样做的原因是,在每次迭代中,您都用新的数组替换数组。使用上面的代码,您会将值添加到数组中,而不是每次都创建一个新值。

更新:我看到了另一个问题。它echo在最后。您拥有 中的所有值array,但您只打印最后一个,因为$i是最后一个数组的键。

你可以通过做检查

var_dump($UPS_respond);

如果你告诉我,你到底想如何使用这些值,我可以告诉你如何处理它。


查看完整回答
反对 回复 2021-11-13
  • 3 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信