我不知道为什么这会一直失误。
最好的部分是它实际上回声的回声。这个函数是我为WordPress编写的插件。
function find_field($field_name,$array) {
if(array_key_exists($field_name,$array)) {
echo 'Here';
echo $array[$field_name];
return $array[$field_name];
}
foreach($array as $value) {
if(is_array($value)) {
find_field($field_name,$value);
}
}
return false;
}
如果我执行此操作:echo find_field('cellphone_number',$arr);
这是我的$arr
:
array(
'page' => 'wp_crm_add_new',
'wp_crm' => array(
'user_data' => array(
'user_id' => array(
(int) 0 => array(
'value' => ''
)
),
'user_pass' => array(
(int) 1428 => array(
'value' => ''
)
),
'role' => array(
(int) 2718 => array(
'value' => ''
)
),
'display_name' => array(
(int) 14454 => array(
'value' => 'Albert'
)
),
'user_email' => array(
(int) 26059 => array(
'value' => 'albert@domain.com'
)
),
'company' => array(
(int) 85772 => array(
'value' => ''
)
),
'cellphone_number' => array(
(int) 62506 => array(
'value' => '0820000000'
)
),
'last_visit' => array(
(int) 45073 => array(
'value' => ''
)
)
)
),
'meta-box-order-nonce' => '1374268beb',
'closedpostboxesnonce' => '92fffdd685',
'wp_crm_update_user' => '42d35393d7',
'show_admin_bar_front' => 'false',
'color-nonce' => 'c02f4b0a88',
'admin_color' => 'sunrise',
'original_publish' => 'Publish',
'publish' => 'Save'
)
每次都得到false
作为结果。我做错了什么?
答案 0 :(得分:4)
这种情况正在发生,因为您返回false。这是逻辑分解:
function find_field($field_name,$array) {
if(SOMETHING) {
DO SOMETHING
return SOMETHING;
}
foreach($array as $value) {
if(SOMETHING) {
CALL RECURSIVE FUNCTION
}
}
return false;
}
像这样......如果你在任何时候调用函数并发送一个传递第一个if语句的值,那么你返回一个值。如果你没有传递if语句(也就是array_key不存在)那么你进入一个foreach循环,它执行一些东西,调用一个递归函数,最终返回一个值(并且不做任何事情)到最后一行代码......返回false。
在将递归函数复合为递归函数之前,首先要将其视为一次性函数。
就像任何其他函数一样,这个递归函数将在完成之前执行每行代码(尽管已中断)。你执行的最后一行代码总是"返回false"这就是你的结果。
也许你应该在调用递归函数时返回内部foreach循环值:
function find_field($field_name,$array) {
if(array_key_exists($field_name,$array)) {
echo 'Here';
echo $array[$field_name];
return $array[$field_name];
}
foreach($array as $value) {
if(is_array($value)) {
return find_field($field_name,$value);
}
}
return false;
}