[PHP] - 我想在我的多维数组中抽取我的值的路径。
这是我的数组JSON:
[{"id":8,"uniqe_id":"tmr955q0","nome":"Vini e Bollicine","parent_id":null,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:33:42","updated_at":"2018-01-28 18:36:45","children":{"9":{"id":9,"uniqe_id":"icmxpxyt","nome":"Italia","parent_id":8,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:58:06","updated_at":"2018-01-28 19:20:45","children":{"10":{"id":10,"uniqe_id":"hpgmsm71","nome":"Cantina Sant'Andrea","parent_id":9,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 19:21:40","updated_at":"2018-01-28 19:21:40","children":[]}}}}},{"id":11,"uniqe_id":"8c81t2jr","nome":"Birre Classic","parent_id":null,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:33:42","updated_at":"2018-01-29 11:48:09","children":{"12":{"id":12,"uniqe_id":"1ma148y4","nome":"Germania","parent_id":11,"tipo":"submenu","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 18:58:06","updated_at":"2018-01-29 15:40:51","children":{"13":{"id":13,"uniqe_id":"vai1fmki","nome":"Radeberger","parent_id":12,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 19:21:40","updated_at":"2018-01-29 13:02:23","children":[]},"14":{"id":14,"uniqe_id":"ffynhlzb","nome":"Warsteiner","parent_id":12,"tipo":"link","link":"https:\/\/alaindifabio.com\/","created_at":"2018-01-28 21:41:38","updated_at":"2018-01-29 13:02:28","children":[]}}},"15":{"id":15,"uniqe_id":"r03gx6rs","nome":"Italia","parent_id":11,"tipo":"submenu","link":null,"created_at":"2018-01-28 21:42:26","updated_at":"2018-01-28 21:42:26","children":{"16":{"id":16,"uniqe_id":"8v3pgirb","nome":"Baladin","parent_id":15,"tipo":"link","link":"https:\/\/alaindifabio.com\/","created_at":"2018-01-28 21:43:37","updated_at":"2018-01-28 21:43:37","children":[]}}},"17":{"id":17,"uniqe_id":"3qb5sr5p","nome":"About","parent_id":11,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-29 15:24:37","updated_at":"2018-01-29 15:24:37","children":[]}}}]
例如我想用uniqe_id获取值数组中的路径:8v3pgirb for path使用所有父项的嵌套数组
答案 0 :(得分:0)
试试这个。
<?php
$data_string = '[{"id":8,"n...';
$array = json_decode($data_string, true);
function findPath($target_key, $target_value, $array, $path = [])
{
foreach ($array as $key => $value) {
if ($value == $target_value && $key == $target_key) {
$path[] = $key;
return $path;
}
if (is_array($value)) {
$path[] = $key;
if (false !== $result = findPath($target_key, $target_value, $value, $path)) {
return $result;
}
}
}
return false;
}
print_r(findPath('id', '10', $array));
输出:
Array
(
[0] => 0
[1] => children
[2] => 9
[3] => children
[4] => 10
[5] => id
)
答案 1 :(得分:0)
我用这个功能解决了:
public static function findPathOnNestedArray(array $array, $string, array &$result) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$success = static::findPathOnNestedArray($value, $string, $result);
if ($success) {
if(isset($value['nome'])){
if($value['nome'] !== null){
array_unshift($result, $value['nome']);
}
}
return true;
}
} else {
if (strcmp($string, $value) == 0) {
array_unshift($result, $key);
return true;
}
}
}
return false;
}