我的PHP脚本是这样的,它的工作原理,它模拟像它是从SQL查询中加入,但它不是最优化,一切都在RAM中,有人可以帮助我如何优化和根据第一个CSV文件的“连接”的左侧,只从其他CSV中加载必要的行和列中的RAM?另外,如果它能够模拟WHERE子句,那么它应该查看更少的数据,是真的吗?PHP脚本
<pre>
<?php
ini_set('memory_limit', '1024M');
$city = array_map('str_getcsv', file('a.csv'));
$table = array_map('str_getcsv', file('c.csv'));
function left_join_array($left, $right, $left_join_on, $right_join_on){
$final= array();
foreach($left AS $k => $v){
$final[$k] = $v;
foreach($right AS $kk => $vv){
if($v[$left_join_on] == $vv[$right_join_on]){
foreach($vv AS $key => $val)
$final[$k][$key] = $val;
}
}
}
return $final;
}
$new_table = left_join_array($table, $city, 4, 0);
print_r($new_table);
我a.csv文件看起来像这样:
70106,Belgrade
70114,New York
70122,London
70220,Moscow
我c.csv文件看起来像这样:
id | id_continent | id_country | zip_code | id_city
1 Europe England WC2N 5DU 70122
2 North America USA 10004 70114
3 Europe Belgrade 11000 70106
4 Europe Moscow 101000 70220
这个文件有多大?你内存不足了吗?如果不是,为什么这很重要? RAM很便宜。 – ADyson
@ADyson它包含的行2畅想,性能我想只加载必要的数据,并且使脚本更快,只与需要 – MPetrovic
你不能加载到内存“只有你所需要的数据”的数据工作因为您必须先将数据加载到RAM中(从磁盘),然后才能读取它并检查是否需要它。第二十二条军规。当然,你可以尝试单独读取文件的每一行,然后在不需要的时候丢弃它,但是你必须测试这是否比在一次操作中从磁盘中提取整个文件更有效,给定的行数。 – ADyson