복붙노트

다차원 배열 값에 액세스하기

PHP

다차원 배열 값에 액세스하기

몇 시간 동안 어지럽히고, 땀을 흘리며 내 머리카락을 뽑아 낸 후에도 나는 여전히 이러한 가치에 접근 할 수 없습니다. 첫 번째 레벨의 배열을 반복하고 싶습니다. 기본 'foreach'루프를 사용하면 충분히 간단하지만 두 번째 하위 배열의 '['적합성 '] 배열을 얻을 수없는 것 같습니다. 주위를 둘러 보았지만 루핑을하기까지는 탐구하지 않는 것 같은 기본적인 기본 튜토리얼 이외의 것을 얻을 수없는 것 같습니다.

중첩 / 하위 배열 즉, '['Species_name ']'의 값에 액세스하려고합니다.

나는 정렬이 약간의 문제이기 때문에 연관 키를 사용하고 싶지 않다.

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Bradeley Hall Pool
            [postcode] => CW1 5QN
            [lat] => 53.10213
            [lon] => -2.41069
            [size] => 1.60
            [pegs] => 21
            [distance] => 26.6
        )

    [1] => Array
        (
            [id] => 2
            [name] => Farm Pool
            [postcode] => CW9 6JQ
            [lat] => 53.320502
            [lon] => -2.549049
            [size] => 0.88
            [pegs] => 8
            [distance] => 15.4
            [suitability] => Array
                (
                    [0] => Array
                        (
                            [fk_water_id] => 2
                            [fk_species_id] => 4
                            [species_name] => Barbel
                            [species_rating] => 1
                            [record_id] => 1
                            [weight_kg] => 2.721554
                            [length_cm] => 40
                            [height_cm] => 30
                        )
                )
       )
)

해결법

  1. ==============================

    1.아마 당신을 트립하는 것은 배열이 단순히 배열이 아니므로 배열의 배열이므로 첫 번째 두 번째 최상위 요소의 species_name 속성을 얻으려는 예제에서는

    아마 당신을 트립하는 것은 배열이 단순히 배열이 아니므로 배열의 배열이므로 첫 번째 두 번째 최상위 요소의 species_name 속성을 얻으려는 예제에서는

    $array[1]["suitability"][0]["species_name"];
    

    첫 번째 배열에는 액세스 할 수 없도록 "적합성"값이 포함되어 있지 않습니다. foreach 루프에서는 다음과 비슷한 구조를 사용할 수 있습니다.

    foreach($array as $value){
        if (isset($value["suitability"])){
            echo $value["suitability"][0]["species_name"];
        }
    }
    
  2. ==============================

    2.PHP : RecursiveArrayIterator 클래스를 살펴 보시기 바랍니다.

    PHP : RecursiveArrayIterator 클래스를 살펴 보시기 바랍니다.

    이것에 의해, 복수의 중첩 ArrayIterator를 반복 처리 할 수 ​​있습니다. 만약 당신이 어떤 ArrayIterator를 사용하지 않는다면, 당신은 그것들을 사용해보아야한다.

  3. ==============================

    3.Iracicot의 답변은 아래의 RecursiveIterator 클래스를 사용하여 재귀 배열의 값에 액세스하는 방법을 찾는데 도움이되었습니다. 내 솔루션은 http://php.net/manual/en/class.recursiveiteratoriterator.php에 따라 더욱 유용한 RecursiveIteratorIterator 클래스를 사용하여 종료되었습니다. 최종 제품이 내가 개인적으로 훨씬 쉽게 작업 할 수있는 평평한 배열이라는 매우 유용한 사실을 명심하십시오.

    Iracicot의 답변은 아래의 RecursiveIterator 클래스를 사용하여 재귀 배열의 값에 액세스하는 방법을 찾는데 도움이되었습니다. 내 솔루션은 http://php.net/manual/en/class.recursiveiteratoriterator.php에 따라 더욱 유용한 RecursiveIteratorIterator 클래스를 사용하여 종료되었습니다. 최종 제품이 내가 개인적으로 훨씬 쉽게 작업 할 수있는 평평한 배열이라는 매우 유용한 사실을 명심하십시오.

    <table style="border:2px;">
      <tr>
        <th>Time</th>
        <th>Service Number</th>
        <th>Destination</th>
      </tr>
    <?php 
    foreach($stops as $buses){
           $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($buses));
           $bus = (iterator_to_array($iterator,true)); 
           print('<tr><td>'.$bus['AimedDepartureTime'].'</td><td>'.$bus['PublishedLineName'].'</td><td>'.$bus['DirectionName'].'</td></tr>');
    }
    ?>
    </table>
    
  4. ==============================

    4.폴백을 사용하여 다차원 배열에서 중첩 된 요소 값을 기본값으로 가져 오려면 다음을 사용할 수 있습니다.

    폴백을 사용하여 다차원 배열에서 중첩 된 요소 값을 기본값으로 가져 오려면 다음을 사용할 수 있습니다.

    Arr::getNestedElement($array, $keys, $default = null)
    

    이 라이브러리의 내용은 다음과 같습니다.

    Arr::getNestedElement($array, [$index1, 'suitability', $index2, 'species_name'])
    

    배열에 존재하지 않는 키에 액세스하려고하면 경고 대신 null (또는 지정된 기본값)이 반환됩니다.

  5. from https://stackoverflow.com/questions/17139453/php-accessing-multidimensional-array-values by cc-by-sa and MIT license