Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中如何在while循环中分配数组_Php_Arrays_Variable Assignment_Assign - Fatal编程技术网

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

在php中如何在while循环中分配数组,php,arrays,variable-assignment,assign,Php,Arrays,Variable Assignment,Assign,我试图逐行读取.txt文件中的值,然后将其存储在数组中,以便以后在程序中使用这些值。 问题是,当我在循环内部打印数组时,它打印得很好,但当我尝试在循环外部打印它时,它不会打印任何内容 txt文件: I/p电压:212.0I/p故障电压:212.0O/p电压: 212.0O/P电流:000I/P频率:50.0电池电压:13.7温度:28.0UPS状态:00001001 我的代码: 数组名称为$UPS\u respond <?php # ----------------------------

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

txt文件: I/p电压:212.0
I/p故障电压:212.0
O/p电压: 212.0
O/P电流:000
I/P频率:50.0
电池电压:13.7
温度:28.0
UPS状态:00001001

我的代码: 数组名称为
$UPS\u 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>";
?>

您必须在
while
循环之前添加
$UPS\u respond=[]
。 你也必须改变

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

原因是,在每次迭代中,您都要用一个新的数组替换该数组。使用上述代码,您将向数组添加值,而不是每次创建一个新值

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

你可以通过这样做来检查

var_dump($UPS_respond);
如果您告诉我,您希望如何准确地使用这些值,我可以告诉您如何处理它。

@Digital\u

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

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

?>

原始答案:

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
您可以使用以下方法使事情变得更简单。使用
file()
explode()
PHP函数读取文件内容并解析每行内容

<?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);
// ?>
更新:

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\u respond
数组中添加一个项,并使用
$UPS\u respond[]=



echo“Well bugger me,在循环$i之后出现以下值:”$一,
如果您将
echo$i
放入,您将意识到它的值是
8
,因为它在退出循环之前最后一次递增,并且数组没有分配给该键的值。不,仍然不工作。感谢您回答btwit提供的一些内容,如循环内部=>$UPS\U响应[0]:循环内部数组=>$UPS\U响应[1]:循环内部数组=>$UPS\U响应[2]:循环内部数组=>$UPS\U响应[3]:循环内部数组=>$UPS\U响应[4]:循环内部数组=>$UPS\U响应[5]:循环内部数组=>$UPS\U响应[6]:Array-in-of-Loop=>$UPS\u-response[7]:Array-out-of-Loop=>感谢您的帮助,martin。我怀疑问题出在分配数组上,拉姆·钱德解决了。问题不是你所解释的。问题只是我分配数组的方式。你说得对。对不起。我是一个php迷,所以我没有完全理解你!!!我的坏消息看起来不错,但我只想看每行的数字。例如,在第1行中,我需要212.0only@Digital_affection出现错误的原因是您需要使用
$UPS\u respond[]=
在数组中添加项目。非常感谢!我的问题解决了!不知道是什么,tho!很高兴听到这个消息:)
<?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
<?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);
// ?>