>

foreach 루프에서 다른 어레이 사이의 [name] 값을 비교하고 싶지만 동일한 레벨이 아닙니다.

Array(
    [array1] => Array
       (
           [0] => WP_Term Object
               (
                   [name] => Plafond
               )
       )
   [array2] => WP_Term Object
       (
           [name] => Chaudière
       )
   [array3] => Array
       (
           [0] => WP_Term Object
               (
                   [name] => Pla
               )
           [1] => WP_Term Object
               (
                   [name] => Toc
               )
       )
)

레벨이 다르지만 같은 루프에서 [이름]을 얻는 방법을 모르겠습니다. 나는 노력했다 :

foreach( $fields as $name => $value )
  {
    echo   $value->name;  }

첫 번째 루프에 다른 루프를 추가해야합니까? 감사합니다


  • 답변 # 1

    데이터는 다음과 같습니다.

    $json = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';
    $array = json_decode($json);
    
    

    얼마나 깊을 지 모른다면 간단한 재귀 함수가 작동해야합니다. 아마도 다음과 같습니다 :

    function get_name($o, &$output) {
        if (is_array($o)) {
            foreach($o as $v) {
                get_name($v, $output);
            }
        } elseif (property_exists($o, "name")) {
            $output[] = $o->name;
        }
    }
    $output = [];
    foreach ($array as $v) {
        get_name($v, $output);
    }
    
    

    데이터가 제공 한 샘플 (예 : 항상 첫 번째 또는 두 번째 수준)처럼 보일 경우 재귀에 대해 걱정할 필요가 없습니다.

    $output = [];
    foreach ($array as $k=>$v) {
        if (is_array($v)) {
            foreach ($v as $k2=>$v2) {
                $output[] = $v2->name;
            }
        } else {
            $output[] = $v->name;
        }
    }
    
    
    어느 쪽이든, 출력 값은 모두 $output 에 있습니다.  배열 :

    print_r($output);
    
    

    출력 :

    Array
    (
        [0] => Plafond
        [1] => Chaudière
        [2] => Pla
        [3] => Toc
    )
    
    

  • 답변 # 2

    array_map 를 사용할 수 있습니다 array_key_exists   name 를 검색  배열의 색인

    $jsonFormat = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';
    $jsonArray  = json_decode($jsonFormat,true);
    $res = [];
    array_map(function($v) use (&$res){
       if(array_key_exists('name', $v)){
         $res[] = $v['name'];
       }else{
         foreach($v as $_key => $_value){
            $res[] = $_value['name'];
         }
      }
    }, $jsonArray);
    echo '<pre>';
    print_r($res);
    
    

    결과 :-

    Array
    (
     [0] => Plafond
     [1] => Chaudière
     [2] => Pla
     [3] => Toc
    )
    
    

    $res 를 사용할 수 있습니다  이름을 비교합니다.

  • 이전 (하위) 모듈의 Python 스크립트가 디렉토리 계층의 업스트림에서 가져올 수 있습니까?
  • 다음 MySQL 트리거의 SELECT는 정수 및 날짜 필드에 대해 NULL을 반환합니다