这是一个最佳实践/设计问题。
我正在创建一个涉及动态大小网格的小型浏览器游戏(想想扫雷)。网格的每个单元都有与之关联的数据,我目前正在以3维或4维数组存储。
我不确定具体如何或何时,但在某些时候我开始遇到内存限制问题(限制为128M)。
通常,大部分数据都存储在一个如下所示的数组中:
$values[$r][$c]['id'] = $id;
$values[$r][$c]['value'] = $value;
$values[$r][$c]['input'] = $value;
$values[$r][$c]['bgColor'] = bgColor($r, $c);
$values[$r][$c]['color'] = contrastingColor($values[$r][$c]['bgColor']);
$values[$r][$c]['weight'] = 'normal';
$values[$r][$c]['style'] = 'normal';
$values[$r][$c]['font'] = 'Arial';
$values[$r][$c]['fSize'] = '100%';
$values[$r][$c]['markerPaths'] = array();
$values[$r][$c]['deletedMarkerPaths'] = array();
其中$ r和$ c表示单元格的行和列。这里的参考是URL:http://www.deckbuildangaems.net/misc/gridgame/
我看到一个“简单”的内存优化,因为我可以将行和列存储为单个字符串,并在每次需要时解析它,尽管我很乐意避免这种情况。但总的来说,我觉得我在PHP中的糟糕经历已经达到极限,而无需在学习更高级的技术和优化方面迈出下一步。
所以我想我的表面问题是,是否有一种简单的方法来保持我整齐的结构和易于访问的阵列,并且仍然减少资源使用,或者我是否需要查看其他存储格式。而我的根本担忧是,如果这不可行,那么我应该从哪里开始穿上我的大男孩裤子呢?或者简单地回答:“远离PHP”?
感谢您的任何建议, ==马特
答案 0 :(得分:1)
达到PHP内存限制不应该是一个问题。 PHP在内部将所有数组存储在Hash Table中。从最佳实践的角度来看,你真的不希望在内存中有数千个字节的数据,而是将它放在某种数据库甚至是平面文件中。即使这样,也不应仅仅使用您描述的用例来限制内存限制。
打击内存的大多数问题都是由于错误造成的。 PHP本身在处理数据方面非常有效,正常的用例不会达到它的极限。但是,我建议使用数据库系统,甚至像SQLite(开销非常低)。