php递归函数不';行不通
我很难理解为什么这不起作用。我有一个递归函数,它检查多维数组中的值是否存在。 然后我有php递归函数不';行不通,php,Php,我很难理解为什么这不起作用。我有一个递归函数,它检查多维数组中的值是否存在。 然后我有get_teams()函数,我只想从中返回唯一的值。我使用find_value()函数检查唯一值,但它仍然返回所有值。。有人能解释一下发生了什么事吗?提前谢谢 function find_value( $array, $searched_val ) { foreach ( $array as $key => $val ) { if ( $val === $searched_val
get_teams()
函数,我只想从中返回唯一的值。我使用find_value()
函数检查唯一值,但它仍然返回所有值。。有人能解释一下发生了什么事吗?提前谢谢
function find_value( $array, $searched_val ) {
foreach ( $array as $key => $val ) {
if ( $val === $searched_val ) {
return true;
}
if ( is_array( $val ) ) {
return find_value( $val, $searched_val );
}
}
return 0;
}
get_teams();
function get_teams() {
$people = get_data( 'some/file.json' );
$teams = [];
foreach ( $people as $person ) {
if ( ! find_value( $teams, $person['team'] ) ) {
$teams[] = [ 'text' => $person['team'] ];
}
}
return $teams;
}
这是示例输入
Array
(
[0] => Array
(
[id] => 1
[name] => Friedrich Robel
[team] => WordPress
[position] => Frontend Developer
[salary] => 4400
)
[1] => Array
(
[id] => 2
[name] => Mr. Christop Veum
[team] => HTML
[position] => Manager
[salary] => 1200
)
[2] => Array
(
[id] => 3
[name] => Demarco Rippin
[team] => HTML
[position] => QA
[salary] => 4400
)
[3] => Array
(
[id] => 4
[name] => Felicia Farrell
[team] => HTML
[position] => QA
[salary] => 1200
)
[4] => Array
(
[id] => 5
[name] => Torrance Fritsch
[team] => HTML
[position] => Assistant Manager
[salary] => 2500
)
[5] => Array
(
[id] => 6
[name] => Erica Daugherty
[team] => Mail
[position] => Assistant Manager
[salary] => 500
)
)
我想要这个输出
Array
(
[0] => WordPress,
[1] => HTML,
[2] => Mail
)
您的问题是返回子搜索的结果而不进行测试 您必须测试其值,而不是返回find_值(…)
function find_value( $array, $searched_val ) {
foreach ( $array as $key => $val ) {
if ( $val === $searched_val ) {
return true;
}
if ( is_array( $val ) ) {
// Here, you have to test the result before to return TRUE.
if (find_value( $val, $searched_val )) {
return true ;
}
}
}
return 0;
}
您的问题是返回子搜索的结果而不进行测试 您必须测试其值,而不是返回find_值(…)
function find_value( $array, $searched_val ) {
foreach ( $array as $key => $val ) {
if ( $val === $searched_val ) {
return true;
}
if ( is_array( $val ) ) {
// Here, you have to test the result before to return TRUE.
if (find_value( $val, $searched_val )) {
return true ;
}
}
}
return 0;
}
正如Syscall发布的那样,该修复程序用于测试
find_value()
的返回,并且仅在为真时返回
由于您的代码现在是结构化的,它将从递归调用返回true或false,这将始终是必需的,因为您将您的值存储为['text'=>$person['team']]代码>
代码的设计方式是,在foreach
之外使用return 0
仅在未找到匹配项的情况下返回false。因此,从该条件的内容返回false
是不成熟的。循环没有机会迭代和测试所传递数组的所有值。这种提前返回会导致重复的数组条目
在任何情况下,最后的结果都将是一个['text'=>'']
数组成员的数组。如果只需要作业字符串,请按如下方式分配:
$teams[] = $person['team'];
如果进行此更改,则不需要另一个。请注意,它还消除了递归的需要,因为$teams
将只包含一个字符串数组。正如Syscall发布的那样,修复程序用于测试find_value()
的返回,并且仅当它为真时才返回
由于您的代码现在是结构化的,它将从递归调用返回true或false,这将始终是必需的,因为您将您的值存储为['text'=>$person['team']]代码>
代码的设计方式是,在foreach
之外使用return 0
仅在未找到匹配项的情况下返回false。因此,从该条件的内容返回false
是不成熟的。循环没有机会迭代和测试所传递数组的所有值。这种提前返回会导致重复的数组条目
在任何情况下,最后的结果都将是一个['text'=>'']
数组成员的数组。如果只需要作业字符串,请按如下方式分配:
$teams[] = $person['team'];
如果进行此更改,则不需要另一个。请注意,它还消除了递归的需要,因为$teams
将只包含字符串数组。我们需要样本输入和所需输出来告诉您问题。我们需要样本输入和所需输出来告诉您问题。