Php 在递归数组中找到正确的值
我有一个包含多个子数组的数组,如下所示:Php 在递归数组中找到正确的值,php,Php,我有一个包含多个子数组的数组,如下所示: Array ( [0] => Array ( [Page_ID] => 1 [Page_Parent_ID] => 0 [Page_Title] => Overview [Page_URL] => overview [Page_
Array
(
[0] => Array
(
[Page_ID] => 1
[Page_Parent_ID] => 0
[Page_Title] => Overview
[Page_URL] => overview
[Page_Type] => content
[Page_Order] => 1
)
[1] => Array
(
[0] => Array
(
[Page_ID] => 2
[Page_Parent_ID] => 1
[Page_Title] => Team
[Page_URL] => overview/team
[Page_Type] => content
[Page_Order] => 1
)
)
[2] => Array
(
[Page_ID] => 3
[Page_Parent_ID] => 0
[Page_Title] => Funds
[Page_URL] => funds
[Page_Type] => content
[Page_Order] => 2
)
[3] => Array
(
[0] => Array
(
[Page_ID] => 4
[Page_Parent_ID] => 3
[Page_Title] => Strategy
[Page_URL] => funds/strategy
[Page_Type] => content
[Page_Order] => 1
)
[1] => Array
(
[0] => Array
(
[Page_ID] => 7
[Page_Parent_ID] => 4
[Page_Title] => A Class Fund
[Page_URL] => funds/strategy/a-class-fund
[Page_Type] => content
[Page_Order] => 1
)
[1] => Array
(
[0] => Array
(
[Page_ID] => 10
[Page_Parent_ID] => 7
[Page_Title] => Information
[Page_URL] => funds/strategy/a-class-fund/information
[Page_Type] => content
[Page_Order] => 1
)
[1] => Array
(
[Page_ID] => 11
[Page_Parent_ID] => 7
[Page_Title] => Fund Data
[Page_URL] => funds/strategy/a-class-fund/fund-data
[Page_Type] => content
[Page_Order] => 2
)
)
[2] => Array
(
[Page_ID] => 8
[Page_Parent_ID] => 4
[Page_Title] => B Class Fund
[Page_URL] => funds/strategy/b-class-fund
[Page_Type] => content
[Page_Order] => 2
)
我需要一个函数来找到正确的页面URL,因此如果您知道$URL是“funds/strategy/a-class-fund”,我需要将其传递给一个函数,该函数返回单个数组结果(在本例中为页面ID=7数组)
如果有一天过得有点愚蠢,任何帮助都将不胜感激 手动执行递归的示例(即不使用库函数)。如果你能用SPL,我推荐戈登的 营救:
function findByPageUrl($url, array $data) {
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($data),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $val) {
if(is_array($val) && array_key_exists('Page_URL', $val)) {
if($val['Page_URL'] === $url) {
return $val;
}
}
}
return FALSE;
}
你能为数组提供
var\u export
而不是print\r
吗?你的主叫foo,应该是find\u parent吗?@fire是的。我最后想到了函数名。另一种方法,为了避免检查每个项的数组,可能是:$iterator=new recursiveiterator(new RecursiveArrayIterator($data));foreach($iterator as$key=>$val){if($key=='Page\u URL'&&$val==$URL){return$iterator->getArrayCopy();}}
(很抱歉要求将所有内容都放在一行上。)
function findByPageUrl($url, array $data) {
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($data),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $val) {
if(is_array($val) && array_key_exists('Page_URL', $val)) {
if($val['Page_URL'] === $url) {
return $val;
}
}
}
return FALSE;
}