我的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