如何在 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);
// ?>
我正在尝试逐行读取 .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);
// ?>