2
我的問題類似於Searching for an array key branch inside a larger array tree - PHP,但是對於不同的限制(比如正在處理等)以及爲什麼不爲了知識緣故,我只想用PHP實現它遞歸。PHP - 通過另一個多維數組搜索數組樹來獲取路徑
考慮一下這個數據:
array(
'root_trrreeee1' => array(
'path1' => array(
'description' => 'etc',
'child_of_path_1' => array(
array('name' => '1'),
array('name' => '1')
)
),
'path1' => array(
'description' => 'etc',
'child_of_path_1' => array(
array('name' => '1'),
array('name' => '1')
)
),
),
'name' => '1',
1 => array('name' => '1'),
'another_leaf' => '1'
)
如果我搜索array('name' => '1')
它應該返回我需要遍歷得到該值root_trrreeee1.path1.child_of_path_1.o
路徑,最好返回數組:
array(
0 => root_trrreeee1
1 => path1
2 => child_of_path_1
3 => 0
)
這是我試圖實現的遞歸函數,但它不工作:
function multidimensional_preserv_key_search($haystack, $needle, $path = array(), &$true_path = array())
{
if (empty($needle) || empty($haystack)) {
return false;
}
foreach ($haystack as $key => $value) {
foreach ($needle as $skey => $svalue) {
if (is_array($value)) {
$path = multidimensional_preserv_key_search($value, $needle, array($key => $path), $true_path);
}
if (($value === $svalue) && ($key === $skey)) {
$true_path = $path;
return $true_path;
}
}
}
if (is_array($true_path)) { return array_reverse(flatten_keys($true_path)); }
return $path;
}
function flatten_keys($array)
{
$result = array();
foreach($array as $key => $value) {
if(is_array($value)) {
$result[] = $key;
$result = array_merge($result, self::flatten_keys($value));
} else {
$result[] = $key;
}
}
return $result;
}
它只返回一個空數組。 在此先感謝。
類似的問題,我發現:
- Searching for an array key branch inside a larger array tree - PHP
- Find a value & key in a multidimensional array
- Find all second level keys in multi-dimensional array in php
- Find an array inside another larger array
- How to search by key=>value in a multidimensional array in PHP
- Searching for a key in a multidimensional array then changing a value with PHP
- How can I find the locations of an item in a Python list of lists?
你有任何的解決方案。我被困在同一點 – dhpratik
我實現了一個自定義的回溯算法:http://en.wikipedia.org/wiki/Backtracking(頁面上的代碼) – eagleal