首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历多维数组

遍历多维数组
EN

Stack Overflow用户
提问于 2011-12-19 19:50:26
回答 3查看 436关注 0票数 0

我使用下面的代码循环一个多维数组,并找到到某所大学的用户,在本例中是UCF。

代码语言:javascript
复制
$friends = $fqlResult;
$friends_BA = array();

foreach ($friends as $friend) {
$isBA = false;
if (is_array($friend['education'])) {
    foreach ($friend['education'] as $school) {
        if (isset($school)) {
            foreach ($school['school'] as $name) {
                if (strpos(strtolower($name['name']), 'University of Central Florida') !== false) {
                    $friends_BA[] = $friend['name'];
                    continue 3; // skip to the next friend
                }
            }
        }
    }
    }
}

d($friends_BA);

多维数组如下所示。这是来自的朋友列表:

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [name] => PERSON
        [education] => 
    )

[1] => Array
    (
        [name] => PERSON
        [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
                    )

            )

    )

[2] => Array
    (
        [name] => PERSON
        [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
                    )

            )

    )

[3] => Array
    (
        [name] => PERSON
        [education] => 
    )

[4] => Array
    (
        [name] => PERSON
        [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
                                    )

                            )

                    )

            )

    )

我运行了一个类似的程序,以发现用户主修的某些科目确实有效,但出于某种原因,上面的代码不起作用。这是一个起作用的:

代码语言:javascript
复制
$friends = $fqlResult;
$friends_BA = array();

foreach ($friends as $friend) {
$isBA = false;
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['name'];
                    continue 3; // skip to the next friend
                }
            }
        }
    }
    }
}

d($friends_BA);

一如既往,任何帮助都将受到真诚的感谢。假日快乐!

更新

有人想试试这个吗?

代码语言:javascript
复制
 $friends = $fqlResult;
        $friends_BA = array();
        foreach ($friends as $friend) {
        $isBA = false;
           if (is_array($friend['current_location'])) {
              foreach ($friend['current_location'] as $location) {
                 if (isset($location)) {
                    foreach ($location['city'] as $city) {
                       $lowerName = strtolower($city);
                       if (strpos($lowerName, 'orlando') !== false || strpos($lowerName, 'gainesville') !== false) {
                       $friends_BA[] = $friend['name'];
                       continue 3; // skip to the next friend
                       }
                     }
                   }
                }
             }
          }

        d($friends_BA);

数组如下所示:

代码语言:javascript
复制
 Array
(
[0] => Array
    (
        [name] => PERSONS NAME
        [current_location] => Array
            (
                [city] => New York
                [state] => New York
                [country] => United States
                [zip] => 
                [id] => 108424279189115
                [name] => New York, New York
            )

    )

[1] => Array
    (
        [name] => PERSONS NAME
        [current_location] => 
    )

[2] => Array
    (
        [name] => PERSONS NAME
        [current_location] => 
    )

[3] => Array
    (
        [name] => PERSONS NAME
        [current_location] => 
    )

[4] => Array
    (
        [name] => PERSONS NAME
        [current_location] => Array
            (
                [city] => San Jose
                [state] => California
                [country] => United States
                [zip] => 
                [id] => 111948542155151
                [name] => San Jose, California
            )

    )

[5] => Array
    (
        [name] => PERSONS NAME
        [current_location] => Array
            (
                [city] => Boston
                [state] => Massachusetts
                [country] => United States
                [zip] => 
                [id] => 106003956105810
                [name] => Boston, Massachusetts
            )

    )

玩了一个小时,但似乎不能让它发挥作用。我得到了关于第二个foreach语句的无效参数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-19 20:39:12

你的问题是案例SensiTivity。您可以在字符串上使用strtolower来检查大学,但是,您发布的大学字符串有混合大小写。将其更改为这一行,它应该可以工作:

代码语言:javascript
复制
if (strpos(strtolower($name['name']), 'university of central florida') !== false) {

如果您想要大小写匹配,删除strtolower,添加大写字母返回,它也应该匹配大小写。

更新

问题的第二部分是$name['name']应该是$name。由于您正在直接访问学校数组,所以它正在遍历该部分。

代码语言:javascript
复制
if (strpos(strtolower($name), 'university of central florida') !== false) {

这样就行了。基本上,这个程序是在学校数组上循环的,所以这个名字是一个字符串值,而不是数组的一部分。

更新2

代码语言:javascript
复制
$lowerName = strtolower($name);
if (strpos($lowerName, 'university of central florida') !== false
        || strpos($lowerName, 'ucf') !== false) {
票数 1
EN

Stack Overflow用户

发布于 2011-12-19 20:00:36

尝试使用这两个函数一起检查整个数组。

它们是完全动态的,并将遍历任何复杂的多维数组

我用它来回显所有维度为1,你可以用它来检查key=>value对,并检查它是否是你要寻找的。

代码语言:javascript
复制
function workwitharrays($v) {
if (is_array($v)) {
foreach ($v as $key => $value) {
    if (is_array($value)) {
        workwitharrays($value);
    } elseif (!is_array($value)) {
        echo "<tr><td>{$key}</td><td>{$value}</td></tr>";
    }
}
}
}

function array_get_key_val($firstarray) {
if (is_array($firstarray)) {
foreach ($firstarray as $k => $v) {
    if (is_array($v)) {
        workwitharrays($v);
    } elseif (!is_array($v)) {
    echo "<tr><td>{$k}</td><td>{$v}</td></tr>";
    }
}
}
}

echo "<table><tbody>";
array_get_key_val($ArrayMultidim);
echo "</tbody></table";
票数 0
EN

Stack Overflow用户

发布于 2011-12-19 20:08:27

你能详细解释一下你所说的“不起作用”是什么意思吗?如果您的测试数据是正确的,那么什么都不应该添加到您的$friends_BA[]数组中,因为没有人上过“中佛罗里达大学”。

你搞错了吗?您可能需要将撇号从值中删除。圣安德鲁可能会引起一个问题,如果国家试图这样做

代码语言:javascript
复制
If('St. Andrew's' == 'University of Central Florida')

这应该会导致错误。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8566675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档