日期:2014-05-17 浏览次数:20601 次
在PHP中,求一算法,麻烦各位了,如下:
$arr0,$arr1及$arr2,$arr3,元素个数是固定的4,不会有变化
$arr0=array('','wc1','','wc3');//此数组了定义了,要执行那些函数及方法
$arr1=array('wc0','wc1','wc2','');
$arr2=array('wc0','','','wc3');
共有自定义函数4个,分别是
function wc0(){
}
function wc1(){
}
function wc2(){
}
function wc3(){
}
问题开始:
对于$arr0,$arr1,$arr2几个数组,当其元素不为空时,便执行相应的自定义函数。举例如下:
当遇到$arr0=array('','wc1','','wc3');执行2个函数:wc1() 与wc3()
当遇到$arr1=array('wc0','wc1','wc2','');执行3个函数,wc0(),wc1(),wc2()
当遇到$arr2=array('wc0','','','wc3');执行2个函数,wc0(),wc3()
.......
您看出规律了吗?对就是这个样子,我现在要改写成一个函数,求算法。即
当遇到$arr,便执行XXXX
function wc0(){
echo "wc0\n";
}
function wc1(){
echo "wc1\n";
}
function wc2(){
echo "wc2\n";
}
function wc3(){
echo "wc3\n";
}
$arr=array('','wc1','','wc3');
foreach($arr as $func){
if(function_exists($func)){
$func();
}
}
------解决方案--------------------
array_product 或 array_reduce 都可以
对于
$ar = array('','wc1','','wc3');
$r = array();
foreach($ar as $func)
$r[] = $func ? $func() : 1;
echo array_product($r);
&& 与相当于乘法
假定 wc1 返回 0、wc3 返回1
则 $r 为 1,0,1,1 连乘后得 0
假定 wc1 返回 1、wc3 返回 1
则 $r 为 1,1,1,1 连乘后得 1
------解决方案--------------------
<?php
function wc0(){
return 1;
}
function wc1(){
return 1;
}
function wc2(){
return 0;
}
function wc3(){
return 1;
}
$arr0=array('','wc1','','wc3');//此数组了定义了,要执行那些函数及方法
$arr1=array('wc0','wc1','wc2','');
$arr2=array('wc0','','','wc3');
for($i=0;$i<3;$i++){
//数组名
$name = 'arr'.$i;
//数组值
$tmpArr = $$name;
$result = 1;
foreach($tmpArr as $fun){
if($fun != ''){
$result = $result && $fun();
}
}
echo $result? 'true' : 'false';
$result == 1;
}
//End_php
------解决方案--------------------
这个比较简单.
$a=Array('a','b','','c');
For($i=0;$i<4;$i++) {
IF($a[$i]!='') {
eval("wc{$i}();");
}
}
function wc0(){
Echo '0';
}
function wc1(){
Echo '1';
}
function wc2(){
Echo '2';
}
function wc3(){
Echo '3';
}