如何解决php项目中的不可移植性
我试图在我的算法中使用“yield”,我的PHP版本是5.4 我正在寻找关于使用“收益率”的任何指导 这是一个FP算法,它在PHP5.5中运行良好,但项目的其余部分使用PHP5.4如何解决php项目中的不可移植性,php,Php,我试图在我的算法中使用“yield”,我的PHP版本是5.4 我正在寻找关于使用“收益率”的任何指导 这是一个FP算法,它在PHP5.5中运行良好,但项目的其余部分使用PHP5.4 公共函数查找频繁项集($transactions,$minimum\u support){ $processedTransactions=array(); $items=array(); //var_dump(交易); foreach($transactions作为$transaction){ //如果(!is_数组
公共函数查找频繁项集($transactions,$minimum\u support){
$processedTransactions=array();
$items=array();
//var_dump(交易);
foreach($transactions作为$transaction){
//如果(!is_数组($transaction))
//继续;
$processed=array();
foreach($交易作为$项目){
//检查此项目是否存在?
如果(数组\键\存在($item,$items)){
$items[$item]+=1;
}否则{
//找不到
$items[$item]=1;
}
数组\u推送($processed,$item);
}//每笔交易。
数组_push($processedTransactions,$processed);
}//每个(事务)先结束。
//从项目支持字典中删除不常用的项目。
foreach(数组_键($items)作为$index){
if($items[$index]<$minimum\u支持){
未设置($items[$index]);
}
}//端环
//var_dump(项目);
//对$processedTransactions中的事务进行排序。
$sortedTransactions=array();
//var_dump($processedTransactions);
foreach($processedTransactions作为$currentTransactions){
$tmp=array();
foreach($currentTransactions作为$item){
如果(数组\键\存在($item,$items)){
//关键出口=频繁项目。
//数组推送($tmp,数组($item,$items[$item]));
$tmp[$item]=$items[$item];
}
}
//根据最频繁的项目进行排序。
阿索特(tmp);
//var_dump($tmp);
阵列按键($sortedTransactions,阵列按键($tmp));
}
$tree=新FPTree();
//添加所有事务。
foreach($sortedTransactions为$currentTransactions){
$tree->add($currentTransactions);
}foreach(查找带有后缀($tree,array(),$minimum\u support)的\u作为$itemset){
产生$itemset;
}
}}
函数find_with_后缀($tree,$suffix,$minimum_支持){
foreach($tree->getItems()作为$element){
$item=$element[0];
$nodes=$element[1];
$support=0;
foreach($n节点){
$support+=$n->getCount();
}
如果($support>=$minimum_support&!array_key_存在($item,$suffix)){
$found\u set=array\u merge(数组($item),$suffix);
$WARNED=array();
$foo=内爆(“,”,$found\u set);
$WARNED[$foo]=$support;
产生$wanted;$condTree=来自路径的条件树($tree->prefixpath($item),$minimum\u support);
foreach(查找带有后缀($condTree,$found\u set,$minimum\u support)的\u作为s){
收益率$s;
}
}
}
正如stackoverflow告诉我们的,这相当“昂贵”若要将算法更改为不使用yield,从而使其与php版本兼容,请从您的帖子中删除拼写错误,并展示一个示例,并说明您认为存在不兼容的原因。请阅读以下内容:@Marged最有可能是OP在php版本较低的服务器上运行?我使用的算法版本为5.5和p项目版本为5.4,因此它将仅在5.5中的yeild函数视为一个错误项目在visual studio 2013上运行,debbug只有5.4需要更正我只执行此任务我无法更改版本现在整个项目在其上运行请任何帮助我不知道该做什么,契约行是Monday@MaiadaWagdy那你就得重写哟您的代码不使用yieldI已尝试,但在我尝试时它不起作用,我不知道要执行什么请您帮助me@MaiadaWagdy也许最好是创建一个新问题或更改此问题。您需要关注的重点是“如何从php算法中删除yield函数,使其与php<5.5兼容”。然后,要么以收益率显示您的代码,要么(如果它只有小问题)您已经尝试删除收益率的代码。删除拼写错误将有助于吸引人们,因为它显示了您的勤奋
public function find_frequent_itemsets($transactions, $minimum_support){
$processedTransactions = array();
$items = array();
//var_dump($transactions);
foreach($transactions as $transaction){
// if(!is_array($transaction))
//continue;
$processed = array();
foreach($transaction as $item){
// check if this item exists ?
if(array_key_exists($item, $items)){
$items[$item] += 1;
}else{
// not found
$items[$item] = 1;
}
array_push($processed, $item);
}// every transaction.
array_push($processedTransactions, $processed);
}// end first for each (transaction).
// Remove infrequent items from the item support dictionary.
foreach(array_keys($items) as $index){
if($items[$index] < $minimum_support){
unset($items[$index]);
}
}// end loop
//var_dump($items);
// sort Transaction in $processedTransactions.
$sortedTransactions = array();
//var_dump($processedTransactions);
foreach($processedTransactions as $currentTransactions){
$tmp = array();
foreach($currentTransactions as $item){
if(array_key_exists($item, $items)){
// key exits = frequent item.
//array_push($tmp, array($item, $items[$item]));
$tmp[$item] = $items[$item];
}
}
// sort based on most frequent item.
arsort($tmp);
//var_dump($tmp);
array_push($sortedTransactions, array_keys($tmp));
}
$tree = new FPTree();
// Add all Transactions.
foreach($sortedTransactions as $currentTransactions){
$tree->add($currentTransactions);
}foreach(find_with_suffix($tree, array(), $minimum_support) as $itemset){
yield $itemset;
}
}}
function find_with_suffix($tree, $suffix, $minimum_support){
foreach($tree->getItems() as $element){
$item = $element[0];
$nodes = $element[1];
$support = 0;
foreach($nodes as $n){
$support += $n->getCount();
}
if($support >= $minimum_support && !array_key_exists($item, $suffix)){
$found_set = array_merge(array($item), $suffix);
$wanted=array();
$foo= implode(", ", $found_set) ;
$wanted[$foo]=$support;
yield $wanted; $condTree=conditional_tree_from_paths($tree->prefixPaths($item),$minimum_support);
foreach(find_with_suffix($condTree, $found_set, $minimum_support) as s){
yield $s;
}
}
}