php 循环大数组 卡死,PHP 大数组循环问题_PHP教程
小妹剛剛改投PHP門下。領導叫我把這段代碼的執(zhí)行效率優(yōu)化一下
我現(xiàn)在知道的優(yōu)化就是小循環(huán)外面,好像在這沒啥用。
請問各位大俠我該怎么優(yōu)化ne ? 領導說放內存里什么的。
基本就是2個大數組不停的循環(huán)算權重。
_aItems = $aItems;
$this->_aMatchs = array();
$this->_aShow = array();
}
public function newTable($aTable){
if (!is_array($aTable))
$aTable = (array)$aTable;
$this->_aTable = $aTable;
$this->generateDict();
}
private function generateDict() {
//將字典處理成數組形式
$convert = function($value) {
$value = str_replace('|', ',', $value);
$value = explode(',', $value);
return $value;
};
$this->_aDict = array_map($convert, $this->_aTable);
}
public function getMatchs() {
//返回對照表
return $this->_aMatchs;
}
public function getShow($sRule = 'debug') {
/*返回格式化的結果集
* $sFormat: 指定輸出格式
*/
if (empty($this->_aItems)||empty($this->_aTable))
//字典源文件不存在
return false;
if (empty($this->_aShow)) {
/*匹配表還沒有生成,自動調用相應的命令生成*/
$this->loopTable();
}
$makeDumpStr = function($value, $key) use (&$dumpStr) {
//生成導出文件的文本
if (count($value) >1) {
foreach ($value as $valueOne) {
$valueStr .= $valueOne. ',';
}
$dumpStr .= $this->_aItems[$key] . "t匹配多個記錄號t". $valueStr ."rn";
} else {
$dumpStr .= $this->_aItems[$key] . "t匹配惟一記錄號t". $value[0] ."rn";
}
};
switch($sRule) {
case 'debug':
print_r($this->_aShow);
break;
case 'json':
return json_encode($this->_aShow);
break;
case 'txt':
$timeExport = date("Y/M/D h:i:s");
$dumpStr = '';
$rFile = fopen('dump.txt', 'w');
array_walk($this->_aShow, $makeDumpStr);
$sContent = <<_ashow>
break;
}
}
private function loopTable() {
//遍歷
foreach ($this->_aItems as $iItemKey=> $sItemLine) {
$this->matchElement($iItemKey);
//print_r($this->_aMatchs);
$this->match2Show($iItemKey);
//print_r($this->_aShow);
//echo "-----------------";
}
//print_r($this->_aMatchs);
//print_r($this->_aShow);
}
private function matchElement($iKey) {
$iMax = 0;
foreach ($this->_aDict as $iDictKey => $aDictLine) {
foreach($aDictLine as $sDictElement) {
$str = $this->_aItems[$iKey];
if(strstr($str, $sDictElement)){
//匹配到一個元素,計數器+1
++$this->_aMatchs[$iKey]['keyring'][$iDictKey];
}
}
if (!$this->_aMatchs[$iKey]['keyring'][$iDictKey]) {
//沒有匹配到內容
$this->_aMatchs[$iKey]['keyring'][$iDictKey] = 0;
}
if ($iMax_aMatchs[$iKey]['keyring'][$iDictKey])
$iMax = $this->_aMatchs[$iKey]['keyring'][$iDictKey];
$this->_aMatchs[$iKey]['index'] = array(
'key' => $iDictKey,
'count' => $iMax
);
}
}
private function match2Show($iKey) {
//將對照表轉化為結果集
$multiMatch = array();
//echo "ikey =". $iKey.", ";
foreach ($this->_aMatchs[$iKey]['keyring'] as $iMatchKey => $iVal) {
if ($iVal_aMatchs[$iKey]['index']['count']) {
//這個值比最大值小
//echo "x";
continue;
} else {
//這個值跟最大值相等,將結果累加到記錄中
//echo "y";
$multiMatch[] = $iMatchKey;
}
}
if (count($multiMatch)> 1)
//多于一條記錄匹配值相同
$this->_aShow[$iKey] = $multiMatch;
else
//匹配值最大值唯一
$this->_aShow[$iKey] = array($this->_aMatchs[$iKey]['index']['key']);
}
}
$aItems = array(
'chinaisbig',
'whichisnot',
.....
上萬條
.....
'totalyrightforme',
);
$aTable = array(
'china,is|small',
'china,big|me',
.....
上千條
.....
'china,is|big,wich|not,me',
);
$weight = new weight();
$weight->newItems($aItems);
$weight->newTable($aTable);
$weight->getShow('debug');
?>
www.bkjia.comtrueTechArticle小妹剛剛改投PHP門下。領導叫我把這段代碼的執(zhí)行效率優(yōu)化一下 我現(xiàn)在知道的優(yōu)化就是小循環(huán)外面,好像在這沒啥用。 請問各位大俠我該…
總結
以上是生活随笔為你收集整理的php 循环大数组 卡死,PHP 大数组循环问题_PHP教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理结束某个进程_进程调度
- 下一篇: 彩票模拟选号程序java_java课程设