Php 从具有多个数据点的文件构建阵列

Php 从具有多个数据点的文件构建阵列,php,arrays,Php,Arrays,我将所有项目存储到文本文件中的行中,如下所示,ID位于开始处 1/item name/content/etc 2/item name/content/etc 3/item name/content/etc 4/item name/content/etc 这种存储方法适用于我们在游戏中使用的一个简单脚本,该脚本可由不同的用户编辑,因此安全性真的不是什么大问题,否则我们只会使用mysqli之类的工具 我需要能够打印出单个条目的变量信息,在开始时由id找到,并且还可以按数字顺序打印,比如3和2。到目

我将所有项目存储到文本文件中的行中,如下所示,ID位于开始处

1/item name/content/etc
2/item name/content/etc
3/item name/content/etc
4/item name/content/etc
这种存储方法适用于我们在游戏中使用的一个简单脚本,该脚本可由不同的用户编辑,因此安全性真的不是什么大问题,否则我们只会使用mysqli之类的工具

我需要能够打印出单个条目的变量信息,在开始时由id找到,并且还可以按数字顺序打印,比如3和2。到目前为止,我正在将它们加载到这样一个数组中

$content = file('script/items.txt');
$items = array($content);
它将整个文件放入如下数组中

array(1) {
    [0]=> array(4) {
        [0]=> string(23) "1/item name/content/etc"
        [1]=> string(23) "2/item name/content/etc" 
        [2]=> string(23) "3/item name/content/etc" 
        [3]=> string(23) "4/item name/content/etc"
     }
}
是否有一种更简单的方法可以仅使用它们的id来选择一个,甚至多个文件,这样我就不必将整个文件存储到数组中(将来可能会变得很大),或者是存储所有文件的最佳方法,一次循环一行,对每个/分解它们,然后比较它们是否在必需的项目中?谢谢。

您需要使用
file()
标志
file\u忽略\u新行\124; file\u跳过\u空行

你可以这样做:-

$content = file('script/items.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
print_r($content);
注:-

现在循环数组以逐个获取记录


id
item\u name
contents
extra
等列将数据保存到数据库表中的最佳方法您可以尝试使用下面的代码逐行读取文件

$handle = fopen("script/items.txt", "r");
if ($handle) {
    while (!feof($handle)) {
    $line = fgets($handle)
        // do your stuffs.
    }

    fclose($handle);
} else {
    // error opening the file.
}
它不会在内存中加载完整的文件,所以您也可以将其用于更大的文件


feof($handle)如果您有一行包含布尔值false

,则可以使用
array\u reduce
将ID作为键存储到数组中

$content = file('script/items.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$content = array_reduce($content, function ($result, $line) {
    list($id, $data) = explode('/', $line, 2) ;
    $result[$id] = $data;
    return $result;
}, array());
print_r($content);
产出:

Array
(
    [1] => item name/content/etc
    [2] => item name/content/etc
    [3] => item name/content/etc
    [4] => item name/content/etc
)
因此,您可以使用而不使用循环获取元素:

$content[$wanted_id]

逐行读取文件。或移动到数据库。删除此行
$items=array($content)并循环
$content
数组本身。最好是转到数据库