1. PHP / Говнокод #21992

    −21

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    // Ищет путь до $needle в многомерном массиве $haystack
        // Если задано поле $field_name, то проверяется не только значение, но и совпадение поля в котором находится значение
        // Структура результата зависит от параметра tree:
        // False - default, возвращается массив содержащий список корней массива, в которых встречается значение
        // True - вовращается в виде дерева (исходной структуры), только с нодами которые содержат искомое значение
        function recursive_array_search_all($needle, $haystack, $field_name = TRUE, $params = ['tree' => false])
        {
            foreach($haystack as $current_key => $value)
            {
                $last = (($needle == $value) && (($field_name == $current_key) || ($field_name === TRUE)));
    
                if($last OR (is_array($value) && ($path = recursive_array_search_all($needle, $value, $field_name, [])))) {
                    if ($last) {
                        $returned[$current_key] = $value;
                    } else {
                        $returned[$current_key] = $path;
                    }
                }
            }
    
            if(isset($params['tree']) && ($params['tree'] != true)) {
                foreach($returned as $root => $arr) {
                    $roots[] = $root;
                }
                $returned = $roots;
            }
    
            if (!empty($returned))
            {
                return $returned;
            }
    
            return false;
        }

    Запостил: akselmj, 18 Января 2017

    Комментарии (3) RSS

    Добавить комментарий