从具有多个数据点的文件构建数组

时间:2018-03-16 07:09:54

标签: 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找到,并且还按数字顺序打印say,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,所以我不必将整个文件存储到数组中(它可能在将来变大)或者是存储它们的最佳方式所有,一次一行地遍历整个数组,为每个/爆炸它们,并且比较它是否在所需的项目中?感谢。

3 个答案:

答案 0 :(得分:1)

您需要使用file()标记FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES

如下所示: -

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

注意: -

现在遍历数组以逐个获取记录。

使用iditem_namecontentsextra 等列保存数据到数据库表的最佳方法>

答案 1 :(得分:0)

您可以尝试以下代码逐行读取文件。

$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 ,它会为你节省。

答案 2 :(得分:0)

您还可以使用array_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]