IT

2 차원 배열을 어떻게 확장합니까?

lottoking 2020. 9. 15. 08:01
반응형

2 차원 배열을 어떻게 확장합니까?


2D 배열을 만드는 가장 쉬운 방법은 무엇입니까? 나는 이와 같은 것을 할 수 있기를 바랬습니다.

declare int d[0..m, 0..n]

배열의 배열을 지정하여 연관 배열 또는 배열과 같은 "해시 테이블"을 사용할 수도 있습니다.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);

다음과 달라집니다.

$array = array();

$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';

$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';

다음은 동등하며 결과적으로 2 차원 배열이됩니다.

$array = array(
    array(0, 1, 2),
    array(3, 4, 5),
);

또는

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);

선언 만 하시겠습니까? 그럴 필요가 없습니다. 변수가 있는지 확인하십시오.

$d = array();

배열은 동적으로 크기가 조정되고 존재하지 않는 요소에 무엇이든 쓰려고 시도하면 (필요한 경우 전체 배열 생성).

$d[1][2] = 3;

이것은 사전 선언없이 모든 차원에 유효합니다.


첫째, PHP에는 다차원 배열이없고 배열이 있습니다.

둘째,이를 수행하는 함수를 사용할 수 있습니다.

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}

간단한 "사용할 때 채우기"종류의 솔루션 :

$foo = array(array());

이렇게하면 $ foo [ n ] [ n ]을 저장할 수있는 유연한 의사 2 차원 배열을 얻을 수 있습니다 . 여기서 n <= ∞ (물론 일반적인 메모리 크기 제한에 의해 제한되지만 원하는 아이디어를 얻습니다). 이론적으로 이것은 필요한만큼의 서브 어레이를 생성하도록 확장 될 수 있습니다.


또는 모두 동일한 값을 갖는 더 큰 배열의 경우 :

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);

모든 것이로 설정된 $mby $n배열을 만듭니다 $value.


이 작업을 수행하는 PHP 함수가 내장되어 있지 않다는 것을 알고있는 한 루프 또는 @Amber의 답변에서 inidcated 된 array_fill과 같은 것을 재귀 적으로 호출하는 사용자 지정 메서드를 통해 수행해야합니다.

나는 당신이 비어 있지만 초기화 된 배열 배열을 만들었다 고 가정하고 있습니다. 예를 들어, 다음과 같은 3 개 배열 배열의 최종 결과를 원합니다 .

   $final_array = array(array(), array(), array());

코드를 작성하는 것은 간단하지만 3 개 배열의 3 개 배열 배열과 같은 임의의 크기 배열의 경우 사용하기 전에 초기화하는 것이 복잡해지기 시작합니다.

     $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));

...기타...

나는 좌절감을 느낀다. 오류를 확인하거나 던지지 않고 사용할 깊이있는 배열의 초기화 된 배열을 쉽게 선언 할 수있는 방법이 있으면 좋을 것입니다.


$r = array("arr1","arr2");

단일 배열 요소를 에코하려면 다음과 같이 작성해야합니다.

echo $r[0];
echo $r[1];

출력은 다음과 같습니다. arr1 arr2


그리고 나에게 배열이 희소 해야하는지 여부에 대한 논쟁은 컨텍스트에 달려 있습니다.

예를 들어 $ a [6] [9]가 채워지지 않은 경우 $ a [6] [9]가 채워지는 것과 동일합니다 (예 : ""또는 0).


그리고 나는이 방식을 좋아합니다

$cars = array
  (
  array("Volvo",22),
  array("BMW",15),
  array("Saab",5),
  array("Land Rover",17)
  );

하나의 라이너를 사용하여 간단한 값에 대한 다차원 배열을 빠르게 생성하려면이 배열 라이브러리사용하여 다음 과 같이하는 것이 좋습니다 .

$array = Arr::setNestedElement([], '1.2.3', 'value');

생산할

[
  1 => [
    2 => [
      3 => 'value'
    ]
  ]
]

atli의 답변은 정말로 이것을 이해하는 데 도움이되었습니다. 다음은 2 차원 배열을 반복하는 방법의 예입니다. 이 샘플은 배열의 알려진 이름에 대한 값을 찾는 방법과 거기에서 찾은 모든 필드를 통과하는 foreach도 보여줍니다. 누군가에게 도움이되기를 바랍니다.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => 'john@example.com'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => 'jane@example.com'
    ),
);

foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}

출력 :

hi element 0
. name is John Doe
. email is john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com

참고 URL : https://stackoverflow.com/questions/1811100/how-do-i-declare-a-two-dimensional-array

반응형