php递归的问题,请大神门指点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php递归的问题,请大神门指点相关的知识,希望对你有一定的参考价值。
今天这个问题困扰了我一天,实在想不出哪里的问题,还请大神们指点。
function array_key_exists_d($key,$arr)
//判读$arr是否是一个数组
if(!is_array($arr)||empty($arr))
return false;
foreach ($arr as $keys=>$value)
var_dump($key);
var_dump($keys);
echo '<hr/>';
if($key===$keys) //二维数组时可以执行到if语句里面就是无法执行return。
return true;//当二维数组时,这个return就无法返回true,
if(is_array($value))
var_dump($value);
array_key_exists_d($key, $value);
return FALSE;
这是我写的一个查询某个值是否在数组的键值名中,只能在一维数组中起作用,而二维数组就不行,
比如$arr=array(
'php'=>2014,
'java'=>2015,
'.net'=>2014,
'c'=>array(
'c++'=>'ok',
)
);
$arr=array_key_exists_d('c++', $arr);
var_dump($arr);这个应该返回true,但一直返回false,但我调试的时候找不到问题的根源。
问题出现的原因其实挺简单,你用以下的试下:
function array_key_exists_d($key,$arr)//判读$arr是否是一个数组
if(!is_array($arr)||empty($arr))
return false;
foreach ($arr as $keys=>$value)
var_dump($key);
var_dump($keys);
echo \'<hr/>\';
if($key===$keys) //二维数组时可以执行到if语句里面就是无法执行return。
return true;//当二维数组时,这个return就无法返回true,
if(is_array($value))
var_dump($value);
return array_key_exists_d($key, $value);//之前加上return
return FALSE;
其实你自己分析的执行流程是对的,它是会执行到if语句里,其实if中的return 返回了true的,但是这个返回是二级数组里递归调用array_key_exists_d时返回,也只是返回在if(is_array($value))这个判断中,也就是返回真假并不会影响它继续执行,所以最后一直执行到结束处的return FALSE了。
用modelsim时报错,请大神指点,(主要看一下模块调用和参数配置的语法有问题吗?)
报错:一是Undefined variable: divider(没有定义模块),二是near "#": unexpected '#'(参数传递语法有问题),如图3。
一个verilog文件“divider”为分频模块,其中用了可配置参数,用来提供不同频率的时钟给串口接收模块。如图1。
一个是“uart_receiver”为串口接收模块,如图2,
在test_bench中调用者两个模块。
test_bench 如下:
`timescale 1ns/1ns
module receiver_TB;
reg clk,rst_n;
localparam PERIOD=20; //50MHz
initial
begin
clk=0;
forever #(PERIOD/2) clk=~clk;
end
//clk divider:9600bps
divider
#(
.DEVIDE_CNT(32'd824634)
)
u_divider2
(
.clk(clk),
.rst_n(rst_n),
.divide_clk(),
.divide_clken(divide_clken2)
);
//uart data txd simulated simulate
wire bps_en=divide_clken2;
reg fpga_rxd;
task task_uart_txd;
input [7:0] uart_data;
begin
@(posedge bps_en); fpga_rxd=0;
@(posedge bps_en); fpga_rxd=uart_data[0];
@(posedge bps_en); fpga_rxd=uart_data[1];
@(posedge bps_en); fpga_rxd=uart_data[2];
@(posedge bps_en); fpga_rxd=uart_data[3];
@(posedge bps_en); fpga_rxd=uart_data[4];
@(posedge bps_en); fpga_rxd=uart_data[5];
@(posedge bps_en); fpga_rxd=uart_data[6];
@(posedge bps_en); fpga_rxd=uart_data[7];
@(posedge bps_en); fpga_rxd=1;
#78;
end
endtask
task task_reset;
begin
rst_n=1;
#200;
rst_n=0;
#300;
rst_n=1;
end
//divider intantiation
divider #(.DEVIDE_CNT(32'd13194140))
u_divider
(
.clk(clk),
.rst_n(rst_n),
.divide_clk(),
.divide_clken(divide_clken)
);
wire clken_16bps=divide_clken;
//data receive from pc to fpga
wire rxd_flag;
wire [7:0] rxd_data;
uart_receiver u_uart_receiver
(
.clk (clk),
.rst_n (rst_n),
//input
.clken_16bps (clken_16bps),
.rxd (fpga_rxd),
//output
.rxd_flag (rxd_flag),
.rxd_data (rxd_data)
);
//system initialization
task task_sysinit;
begin
fpga_rxd=1;
end
endtask
initial
begin
task_sysinit;
task_reset;
#12345;
task_uart_txd(8'hCB);
#12345;
task_uart_txd(8'h0A);
#12345;
task_uart_txd(8'h09);
end
endmodule
final String user = "store";
final String password = "store_password";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, user, password);
return con;
追问
什么意思啊
以上是关于php递归的问题,请大神门指点的主要内容,如果未能解决你的问题,请参考以下文章
用modelsim时报错,请大神指点,(主要看一下模块调用和参数配置的语法有问题吗?)