Php 多维数组的递归函数?
我正在尝试使用递归函数通过多维数组(如下面的数组)进行搜索,以找到某些值,即上过某所学校、主修某一学科、拥有某个职位等的人。如果您不知道,此数组是从Facebook Graph API输出的。实际上,有3个以上的偏移数组,这取决于用户的好友数量,可能有数千个 这是一个我在对递归函数知之甚少的情况下尝试的解决方案(在我发现它不适用于md数组之前,我的第一个想法是在_数组中使用): 为了让您了解下面的md数组是如何工作的,请查看以下代码片段:Php 多维数组的递归函数?,php,mysql,multidimensional-array,Php,Mysql,Multidimensional Array,我正在尝试使用递归函数通过多维数组(如下面的数组)进行搜索,以找到某些值,即上过某所学校、主修某一学科、拥有某个职位等的人。如果您不知道,此数组是从Facebook Graph API输出的。实际上,有3个以上的偏移数组,这取决于用户的好友数量,可能有数千个 这是一个我在对递归函数知之甚少的情况下尝试的解决方案(在我发现它不适用于md数组之前,我的第一个想法是在_数组中使用): 为了让您了解下面的md数组是如何工作的,请查看以下代码片段: $friend = $fqlResult[0]['nam
$friend = $fqlResult[0]['name'];
echo "$friend";
*由于我删除了此人的姓名,因此输出将为“空白”
$data = $fqlResult;
$collegemajor = (isset($value['education'][0]['concentration'][0]['name'])) ? $value['education'][0]['concentration'][0]['name'] : null ;
$major = "Business Administration";
if (isset($collegemajor)) {
foreach($data as $key=> $value) {
if ($value($collegemajor) == $major) {
echo "User $key is majoring in $major";
}
}
}
这是上面提到的多维数组。在本例中,我想提取该用户所有主修商业管理的朋友的姓名。在大学里。正如您从这段代码中看到的,没有(我认为),但是在数组的长版本中,有很多。上面的代码不产生任何输出,我不知道如何使它工作。任何帮助都将不胜感激
Array
(
[0] => Array
(
[name] => BLANK
[education] =>
[work] =>
)
[1] => Array
(
[name] => BLANK
[education] => Array
(
[0] => Array
(
[school] => Array
(
[id] => 108087985890571
[name] => St. Andrew's School
)
[year] => Array
(
[id] => 138383069535219
[name] => 2005
)
[type] => High School
)
[1] => Array
(
[school] => Array
(
[id] => 20697868961
[name] => Boston University
)
[concentration] => Array
(
[0] => Array
(
[id] => 108654845832522
[name] => Business Administration
)
)
[type] => College
)
[2] => Array
(
[school] => Array
(
[id] => 108289315859633
[name] => University of Miami
)
[year] => Array
(
[id] => 138879996141011
[name] => 2013
)
[type] => Graduate School
)
)
[work] => Array
(
)
)
[2] => Array
(
[name] => BLANK
[education] => Array
(
[0] => Array
(
[school] => Array
(
[id] => 115444241803885
[name] => Saint Andrews High School
)
[year] => Array
(
[id] => 137616982934053
[name] => 2006
)
[type] => High School
)
[1] => Array
(
[school] => Array
(
[id] => 112033702149888
[name] => Boca Raton High
)
[year] => Array
(
[id] => 137616982934053
[name] => 2006
)
[type] => High School
)
[2] => Array
(
[school] => Array
(
[id] => 108087985890571
[name] => St. Andrew's School
)
[type] => High School
)
[3] => Array
(
[school] => Array
(
[id] => 107573562605861
[name] => Duke University
)
[concentration] => Array
(
[0] => Array
(
[id] => 104045469631213
[name] => Political science
)
)
[type] => College
)
)
[work] =>
)
[4] => Array
(
[uid] => 1234567
[name] => BOB NO ONE
[education] => Array
(
[0] => Array
(
[school] => Array
(
[id] => 106039752760627
[name] => Berwick Academy
)
[year] => Array
(
[id] => 137616982934053
[name] => 2006
)
[type] => High School
)
[1] => Array
(
[school] => Array
(
[id] => 108087985890571
[name] => St. Andrew's School
)
[type] => High School
)
[2] => Array
(
[school] => Array
(
[id] => 105690226130720
[name] => Northeastern University
)
[concentration] => Array
(
[0] => Array
(
[id] => 108654845832522
[name] => Business Administration
)
)
[type] => College
[classes] => Array
(
[0] => Array
(
[id] => 189873264368867
[name] => 2011
)
)
)
)
考虑到树的深度总是固定的,并且结构是已知的,所以对于这样的东西,实际上不需要递归。使用一些嵌套循环可以达到以下目的:
$friends = $fqlResult;
$friends_BA = array();
foreach ($friends as $friend) {
if (is_array($friend['education'])) {
foreach ($friend['education'] as $school) {
if (isset($school['concentration'])) {
foreach ($school['concentration'] as $concentration) {
if (strpos(strtolower($concentration['name']), 'business') !== false) {
$friends_BA[] = $friend;
continue 3; // skip to the next friend
}
}
}
}
}
}
var_dump($friends_BA);
您需要一个函数,该函数将在数组中的特定字段上查找特定值
function arraySearch($key, $value, $array){
$flag = FALSE;
foreach($array as $result){
if(arraySearch($key, $value, $result)){
$flag = TRUE
}elseif(isset($result[$key] && $result[$key] == $value){
$flag = TRUE;
}
}
return $flag
}
为了提高性能,而不是将$flag设置为true,您可以返回true,因为它将停止函数的执行并阻止它继续搜索数组
就这样说吧
foreach($fqlResult as $result){
if(arraySearch('concentration', 'Business Administration', $result)){
//You have found a user you are looking for, echo $result['name'] or do what you want with the result.
}
}
您想要广泛的递归搜索,还是特定的递归搜索?[例如,奇怪的是,如果某人的学校名为Bus.Admin,您希望通过搜索将其吐出吗?]如上所示,学校和专业都被分配了id,因此在实践中,我很可能在搜索时使用id。我得到了一系列信息:警告:foreach()提供的参数无效在第93行的C:\xampp\htdocs\pathweavr\friendtest.php中,让我补充一点,如果你破解了我苦苦挣扎了几个星期的这个问题的代码,我将严重亏欠你一辈子。哎呀,我没有注意到在某些情况下,
[education]
可能是null
。我刚刚更新了答案。。。试试这个版本。(我刚刚更新了它,搜索id
字段,而不是name
)我们就快到了。它返回了三个拥有商业管理学位的用户。我假设其余的人不会出现,因为他们的名单不仅仅是大学。我将在上面粘贴一个较大的数组部分,如果您认为这就是问题所在,请告诉我。我也得到了一百万:注意:未定义的索引:C:\xampp\htdocs\pathweavr\friendtest.php中的concentration,第106行,106是if(is_数组($school['concentration')){