재귀를 사용하여 트리에서 적절하게 값을 반환합니다.

amdev

이것은 내 코드입니다

https://eval.in/157357

트리를보고 싶다면 json 파서를 사용할 수 있습니다. 이 트리는 Magento SOAP API에 의해 반환됩니다. http://www.magentocommerce.com/api/soap/catalog/catalogCategory/catalog_category.tree.html

<?php
function getCategoryId($tree,$needle,&$val)
{
    if(!empty($tree["name"]) && $tree["name"] === $needle)
    {
        $val = $tree["category_id"];
        return $tree["category_id"];
    }
    else
    {   
        if(isset($tree["children"]["category_id"]))
        {
             getCategoryId($tree["children"],$needle,$val);
        }
        else
        {
            foreach ($tree["children"] as $child) {
               getCategoryId($child,$needle,$val);
            }
        }
    }
}

function main()
{

    $testjson = <<<EOL
{"category_id":"1","parent_id":"0","name":"Root Catalog","is_active":null,"position":"0","level":"0","children":[{"category_id":"2","parent_id":"1","name":"catroot","is_active":"1","position":"1","level":"1","children":[{"category_id":"3","parent_id":"2","name":"cat1","is_active":"1","position":"1","level":"2","children":[{"category_id":"7","parent_id":"3","name":"cat11","is_active":"0","position":"1","level":"3","children":[]},{"category_id":"8","parent_id":"3","name":"cat12","is_active":"0","position":"2","level":"3","children":[]}]},{"category_id":"9","parent_id":"2","name":"cat2","is_active":"0","position":"2","level":"2","children":[{"category_id":"11","parent_id":"9","name":"cat21","is_active":"0","position":"1","level":"3","children":[{"category_id":"12","parent_id":"11","name":"cat211","is_active":"0","position":"1","level":"4","children":[]},{"category_id":"13","parent_id":"11","name":"cat212","is_active":"0","position":"2","level":"4","children":[]}]}]},{"category_id":"10","parent_id":"2","name":"cat3","is_active":"0","position":"3","level":"2","children":[{"category_id":"14","parent_id":"10","name":"cat31","is_active":"0","position":"1","level":"3","children":[]},{"category_id":"15","parent_id":"10","name":"cat32","is_active":"0","position":"2","level":"3","children":[{"category_id":"16","parent_id":"15","name":"cat321","is_active":"0","position":"1","level":"4","children":[{"category_id":"17","parent_id":"16","name":"cat3211","is_active":"0","position":"1","level":"5","children":[]}]}]}]}]}]}
EOL;

    $result = (json_decode($testjson,true));

    $res = getCategoryId($result,"cat211",$val);
    var_dump($res);
    var_dump($val);

}

main();
?>

내 함수 getCategoryId가 NULL을 반환하는 이유는 무엇입니까? 나는 테스트를 위해 정당한 참조 $ val을 사용하고 싶지 않습니다.

스티브

재귀 호출에서 결과를 반환해야합니다.

<?php
    function getCategoryId($tree,$needle,&$val)
    {
        if(!empty($tree["name"]) && $tree["name"] === $needle)
        {
            //var_dump($tree);
            //var_dump($tree["category_id"]);
            $val = $tree["category_id"];
            return $tree["category_id"];
        }
        else
        {   
            if(isset($tree["children"]["category_id"]))
            {
                 return getCategoryId($tree["children"],$needle,$val);
            }
            else
            {
                foreach ($tree["children"] as $child) {
                   $return = getCategoryId($child,$needle,$val);
                   if($return){
                       return $return;
                   }
                }
            }
        }
    }

    function main()
    {

        $testjson = <<<EOL
{"category_id":"1","parent_id":"0","name":"Root Catalog","is_active":null,"position":"0","level":"0","children":[{"category_id":"2","parent_id":"1","name":"catroot","is_active":"1","position":"1","level":"1","children":[{"category_id":"3","parent_id":"2","name":"cat1","is_active":"1","position":"1","level":"2","children":[{"category_id":"7","parent_id":"3","name":"cat11","is_active":"0","position":"1","level":"3","children":[]},{"category_id":"8","parent_id":"3","name":"cat12","is_active":"0","position":"2","level":"3","children":[]}]},{"category_id":"9","parent_id":"2","name":"cat2","is_active":"0","position":"2","level":"2","children":[{"category_id":"11","parent_id":"9","name":"cat21","is_active":"0","position":"1","level":"3","children":[{"category_id":"12","parent_id":"11","name":"cat211","is_active":"0","position":"1","level":"4","children":[]},{"category_id":"13","parent_id":"11","name":"cat212","is_active":"0","position":"2","level":"4","children":[]}]}]},{"category_id":"10","parent_id":"2","name":"cat3","is_active":"0","position":"3","level":"2","children":[{"category_id":"14","parent_id":"10","name":"cat31","is_active":"0","position":"1","level":"3","children":[]},{"category_id":"15","parent_id":"10","name":"cat32","is_active":"0","position":"2","level":"3","children":[{"category_id":"16","parent_id":"15","name":"cat321","is_active":"0","position":"1","level":"4","children":[{"category_id":"17","parent_id":"16","name":"cat3211","is_active":"0","position":"1","level":"5","children":[]}]}]}]}]}]}
EOL;

        $result = (json_decode($testjson,true));

        $res = getCategoryId($result,"cat211",$val);
        var_dump($res);
        var_dump($val);

    }

main();
?>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

교리 ORM (Symfony)을 사용하여 ManyToMany 재귀 적 / 재귀 적 관계를 적절하게 생성

분류에서Dev

Scheme에서 재귀를 사용하여 값 반환

분류에서Dev

여러 재귀 호출을 사용하여 일반 재귀를 꼬리 재귀로 변환

분류에서Dev

Java의 정적 메서드를 사용하여 호출자에게 유효한 값을 반환합니다.

분류에서Dev

BASH 스크립트-GREP를 사용하여 JSON 출력에서 두 개의 특정 값을 반환합니다.

분류에서Dev

반환 값을 재사용하여 이전 행을 찾을 수 있도록 Oracle SQL에서 returning into 절을 어떻게 사용합니까?

분류에서Dev

재귀 함수는 배열 값을 반환하며 PHP의 해당 함수 외부에서 SQL 쿼리의 해당 값을 사용합니다.

분류에서Dev

생성자를 적절하게 사용하여 int 값을 변경합니까?

분류에서Dev

파이썬에서 재귀를 사용하여 목록을 검색합니까?

분류에서Dev

SQL에서 재귀를 사용하여 새 열을 반환하고 싶습니까?

분류에서Dev

재귀 코드를 사용하여 2 개의 값 (총 파일, 폴더)을 반환하고 싶습니다.

분류에서Dev

metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

분류에서Dev

재귀를 사용하여 파이썬에서 값 주변의 사전을 반전

분류에서Dev

가장 큰 값을 찾아서 Excel vba를 사용하여 표에서 제목을 반환합니다.

분류에서Dev

관용적 인 방식으로 재귀를 사용하여 트리를 처리 할 때 F # 맵을 생성하려면 어떻게해야합니까?

분류에서Dev

Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

분류에서Dev

Laravel은 쿼리에서 Excel을 생성하여 maatwebsite를 사용하여 오류를 반환합니다.

분류에서Dev

PHP에서 재귀 함수를 사용하여 배열의 값을 증가시키고 배열에서 총 값을 반환하는 방법

분류에서Dev

매개 변수를 사용하여 메서드를 실행하고 반환 된 값을 제공합니다.

분류에서Dev

내 재귀 메서드가 true를 반환하면 왜 재귀 호출을 입력합니까?

분류에서Dev

C에서 재귀를 사용하여 문자열의 모든 조합을 인쇄합니다.

분류에서Dev

c ++ typeid는 get () 및 *를 사용하여 동일한 unique_ptr에 대해 다른 값을 반환합니다.

분류에서Dev

ADODB 명령 개체를 적절하게 재사용하여 여러 쿼리를 실행합니다.

분류에서Dev

이진 검색을 사용하여 배열의 순서를 확인하는 재귀 함수를 원합니다.

분류에서Dev

Python에서 C ++로 : 재귀를 사용하여 모든 Knapsack 조합을 나열하는 알고리즘

분류에서Dev

Vapor을 사용하여 Future를 반환하는 메서드를 반복적으로 호출합니다.

분류에서Dev

재귀를 사용하여 배열에서 최대 값 찾기

분류에서Dev

재귀를 사용하여 짝수 자리마다 0을 추가

분류에서Dev

TweetSharp를 사용하여 최근 n 개의 트윗을 반환합니다.

Related 관련 기사

  1. 1

    교리 ORM (Symfony)을 사용하여 ManyToMany 재귀 적 / 재귀 적 관계를 적절하게 생성

  2. 2

    Scheme에서 재귀를 사용하여 값 반환

  3. 3

    여러 재귀 호출을 사용하여 일반 재귀를 꼬리 재귀로 변환

  4. 4

    Java의 정적 메서드를 사용하여 호출자에게 유효한 값을 반환합니다.

  5. 5

    BASH 스크립트-GREP를 사용하여 JSON 출력에서 두 개의 특정 값을 반환합니다.

  6. 6

    반환 값을 재사용하여 이전 행을 찾을 수 있도록 Oracle SQL에서 returning into 절을 어떻게 사용합니까?

  7. 7

    재귀 함수는 배열 값을 반환하며 PHP의 해당 함수 외부에서 SQL 쿼리의 해당 값을 사용합니다.

  8. 8

    생성자를 적절하게 사용하여 int 값을 변경합니까?

  9. 9

    파이썬에서 재귀를 사용하여 목록을 검색합니까?

  10. 10

    SQL에서 재귀를 사용하여 새 열을 반환하고 싶습니까?

  11. 11

    재귀 코드를 사용하여 2 개의 값 (총 파일, 폴더)을 반환하고 싶습니다.

  12. 12

    metaflac를 사용하여 flac 태그에서 .flac 파일의 이름을 재귀 적으로 변경합니다.

  13. 13

    재귀를 사용하여 파이썬에서 값 주변의 사전을 반전

  14. 14

    가장 큰 값을 찾아서 Excel vba를 사용하여 표에서 제목을 반환합니다.

  15. 15

    관용적 인 방식으로 재귀를 사용하여 트리를 처리 할 때 F # 맵을 생성하려면 어떻게해야합니까?

  16. 16

    Spectre를 사용하여 맵 맵에서 값을 재귀 적으로 변경

  17. 17

    Laravel은 쿼리에서 Excel을 생성하여 maatwebsite를 사용하여 오류를 반환합니다.

  18. 18

    PHP에서 재귀 함수를 사용하여 배열의 값을 증가시키고 배열에서 총 값을 반환하는 방법

  19. 19

    매개 변수를 사용하여 메서드를 실행하고 반환 된 값을 제공합니다.

  20. 20

    내 재귀 메서드가 true를 반환하면 왜 재귀 호출을 입력합니까?

  21. 21

    C에서 재귀를 사용하여 문자열의 모든 조합을 인쇄합니다.

  22. 22

    c ++ typeid는 get () 및 *를 사용하여 동일한 unique_ptr에 대해 다른 값을 반환합니다.

  23. 23

    ADODB 명령 개체를 적절하게 재사용하여 여러 쿼리를 실행합니다.

  24. 24

    이진 검색을 사용하여 배열의 순서를 확인하는 재귀 함수를 원합니다.

  25. 25

    Python에서 C ++로 : 재귀를 사용하여 모든 Knapsack 조합을 나열하는 알고리즘

  26. 26

    Vapor을 사용하여 Future를 반환하는 메서드를 반복적으로 호출합니다.

  27. 27

    재귀를 사용하여 배열에서 최대 값 찾기

  28. 28

    재귀를 사용하여 짝수 자리마다 0을 추가

  29. 29

    TweetSharp를 사용하여 최근 n 개의 트윗을 반환합니다.

뜨겁다태그

보관