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

How to assign an array inside a while loop in php

我正在尝试逐行读取 .txt 文件中的值,然后将其存储在数组中,以便稍后在我的程序中使用这些值。 问题是当我在循环内打印我的数组时,它打印得很好但是当我尝试在循环外打印它时它不打印任何东西。

txt 文件:

I/P voltage : 212.0
I/P fault voltage : 212.0
O/P voltage : 212.0
O/P current : 000
I/P frequency : 50.0
Battery voltage : 13.7
Temperature : 28.0
UPS Status : 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] : 00001001
Ouside of Loop => 

您必须在 while 循环之前添加 $UPS_respond = []。 您还必须更改

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

$UPS_respond[$i] = $x;

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

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

您可以通过

检查
var_dump($UPS_respond);

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

@Digital_affection

你能试试下面的方法吗?希望对你有帮助。

<?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
)

原回答:

您可以使用以下方法使事情变得更容易。使用 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);
// ?>