我使用下面的代码循环一个多维数组,并找到到某所大学的用户,在本例中是UCF。
$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);多维数组如下所示。这是来自的朋友列表:
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
)
)
)
)
)我运行了一个类似的程序,以发现用户主修的某些科目确实有效,但出于某种原因,上面的代码不起作用。这是一个起作用的:
$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);一如既往,任何帮助都将受到真诚的感谢。假日快乐!
更新
有人想试试这个吗?
$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);数组如下所示:
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语句的无效参数。
发布于 2011-12-19 20:39:12
你的问题是案例SensiTivity。您可以在字符串上使用strtolower来检查大学,但是,您发布的大学字符串有混合大小写。将其更改为这一行,它应该可以工作:
if (strpos(strtolower($name['name']), 'university of central florida') !== false) {如果您想要大小写匹配,删除strtolower,添加大写字母返回,它也应该匹配大小写。
更新
问题的第二部分是$name['name']应该是$name。由于您正在直接访问学校数组,所以它正在遍历该部分。
if (strpos(strtolower($name), 'university of central florida') !== false) {这样就行了。基本上,这个程序是在学校数组上循环的,所以这个名字是一个字符串值,而不是数组的一部分。
更新2
$lowerName = strtolower($name);
if (strpos($lowerName, 'university of central florida') !== false
|| strpos($lowerName, 'ucf') !== false) {发布于 2011-12-19 20:00:36
尝试使用这两个函数一起检查整个数组。
它们是完全动态的,并将遍历任何复杂的多维数组。
我用它来回显所有维度为1,你可以用它来检查key=>value对,并检查它是否是你要寻找的。
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";发布于 2011-12-19 20:08:27
你能详细解释一下你所说的“不起作用”是什么意思吗?如果您的测试数据是正确的,那么什么都不应该添加到您的$friends_BA[]数组中,因为没有人上过“中佛罗里达大学”。
你搞错了吗?您可能需要将撇号从值中删除。圣安德鲁可能会引起一个问题,如果国家试图这样做
If('St. Andrew's' == 'University of Central Florida')这应该会导致错误。
https://stackoverflow.com/questions/8566675
复制相似问题