PHP에서 가장 일반적인 2차원 배열은 키-값 쌍의 형태로 저장된 2차원 연관 배열입니다. 예:
$students = array( array('name' => 'Alice', 'score' => 85), array('name' => 'Bob', 'score' => 72), array('name' => 'Charlie', 'score' => 91) );
위에 표시된 대로 $students
배열은 다음과 같습니다. 각 요소는 연관 배열인 학생 및 성적의 이름을 저장하는 데 사용됩니다. 일부 시나리오에서는 데이터를 전치해야 할 수도 있습니다. 즉, 각 열의 데이터를 하나의 행으로 변환하고, 각 행의 데이터를 하나의 열로 변환해야 할 수도 있습니다. 예를 들어 위 배열을 전치한 후 결과는 다음과 같아야 합니다. $students
数组用来存储学生的姓名和成绩,其中每个元素都是一个关联数组。在某些场景下,我们可能需要对这些数据进行转置操作,即将每一列中的数据变为一行,而将每一行中的数据变为一列。例如,将上述数组转置后,得到的结果应该是:
$transposed = array( array('name' => 'Alice', 'Bob', 'Charlie'), array('score' => 85, 72, 91) );
这样的数组结构更适合某些分析和统计操作。本文将介绍如何用PHP将二维关联数组进行转置操作。
方法一:使用foreach循环转置
最简单的方法是使用foreach循环遍历原数组并生成新的数组。具体实现如下:
function array_transpose($array) { $result = array(); foreach ($array as $key => $row) { foreach ($row as $subkey => $subvalue) { $result[$subkey][$key] = $subvalue; } } return $result; }
该函数接受一个二维关联数组作为参数,返回转置后的新数组。首先,我们定义一个空数组$result
作为结果数组。然后,我们使用双重循环遍历原数组,将行变成列,列变成行。在内层循环中,我们使用$subkey
作为新数组的键,将原数组中的值$subvalue
赋值给新数组的值。外层循环中,我们使用$key
作为新数组的列名,并将新的一列添加到$result
数组中。最后,返回转置后的新数组。
使用该函数,我们可以很容易地将上述示例数组进行转置操作:
$transposed = array_transpose($students);
使用该方法的优点是简单易懂,适用于小规模数据,缺点是在数据量较大时性能较差。
方法二:使用array_map和call_user_func_array函数转置
另一种方法是使用PHP提供的array_map和call_user_func_array函数。这种方法的实现方式更加简洁,同时也更加高效。具体实现如下:
function array_transpose($array) { return call_user_func_array('array_map', array_merge(array(null), $array)); }
该函数也接受一个二维关联数组作为参数,返回转置后的新数组。首先,我们使用array_merge函数将$array
$transposed = array_transpose($students);
rrreee
이 함수는 2차원 연관 배열을 매개변수로 받아들이고 전치 후 새 배열을 반환합니다. 먼저 빈 배열$result
를 결과 배열로 정의합니다. 그런 다음 이중 루프를 사용하여 원래 배열을 반복하여 행을 열로, 열을 행으로 바꿉니다. 내부 루프에서는 $subkey
를 새 배열의 키로 사용하고 원래 배열의 $subvalue
값을 새 배열의 값에 할당합니다. 외부 루프에서는 $key
를 새 배열의 열 이름으로 사용하고 새 열을 $result
배열에 추가합니다. 마지막으로, 새로운 전치된 배열이 반환됩니다. 이 함수를 사용하면 위의 예시 배열을 쉽게 전치할 수 있습니다. 🎜rrreee🎜 이 방법을 사용하는 장점은 간단하고 이해하기 쉽고 소규모 데이터에 적합하다는 것입니다. 단점은 다음과 같습니다. 데이터의 양이 많습니다. 🎜🎜방법 2: array_map 및 call_user_func_array 함수를 사용하여 전치 🎜🎜또 다른 방법은 PHP에서 제공하는 array_map 및 call_user_func_array 함수를 사용하는 것입니다. 이 방법을 구현하는 것이 더 간단하고 효율적입니다. 구체적인 구현은 다음과 같습니다. 🎜rrreee🎜이 함수는 2차원 연관 배열을 매개변수로 받아들이고 전치 후 새 배열을 반환합니다. 먼저 array_merge 함수를 사용하여 $array
배열을 null 값과 병합하고 이를 call_user_func_array 함수에 전달합니다. 이 예에서 array_map 함수는 병합된 배열을 처리합니다. array_map 함수의 첫 번째 매개변수는 각 입력 배열 위치를 처리하는 방법을 지정하는 콜백 함수입니다. null 값은 콜백 함수에 매개변수 이름이 없으며 기본값을 사용하여 입력 배열을 처리함을 나타냅니다. 이 예에서 콜백 함수는 $array를 사용하여 열을 생성하여 모든 입력 배열 인덱스 위치를 행으로 나열합니다. 이는 이 데이터의 동작을 변환하는 데 매우 중요합니다. 실제로 이 함수는 각 배열의 첫 번째 값을 인수로 받아들이고 이를 배열 자체로 대체합니다. 각 키는 배열에 한 번만 나타나므로 결과 배열에는 충돌이 없음이 보장됩니다. 🎜🎜이 함수를 사용하면 위 예제 배열을 다음과 같이 바꿀 수 있습니다. 🎜rrreee🎜 이 방법의 장점은 효율적이고 간결하며 이해하기 쉽고 대규모 데이터 및 복잡한 작업에 적합하다는 것입니다. 🎜🎜요약🎜🎜PHP에서 2차원 연관 배열 전치 연산을 구현하는 방법에는 foreach 루프를 사용하는 것과 array_map 및 call_user_func_array 함수를 사용하는 두 가지 방법이 있습니다. 두 방법 모두 고유한 장점이 있으며 어떤 방법을 선택할지는 특정 애플리케이션 시나리오에 따라 다릅니다. 소규모 데이터 볼륨의 경우 foreach 루프 방법을 선택할 수 있습니다. 대규모 데이터 볼륨 및 복잡한 작업의 경우 array_map 및 call_user_func_array 함수 메서드를 사용하는 것이 좋습니다. 🎜위 내용은 PHP에서 2차원 객체 배열을 전치하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!