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了。

参考技术A 我建议去贴吧里问问。

用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

参考技术A final String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
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时报错,请大神指点,(主要看一下模块调用和参数配置的语法有问题吗?)

vb.net链接数据库怎么出现链接不上请大神指点?

php 自制简单路由类 望大神指点

编了一套爬虫美女图的一组代码,请大神指点一二;

Navicat for MySQL怎么破解啊?急求。大神指点

idea运行下面代码,报错,请哪位大神指点下