PHP에서 다차원 배열을 1차원 배열로 변환하는 방법

PHPz
풀어 주다: 2023-04-27 14:35:18
원래의
831명이 탐색했습니다.

PHP에서 다차원 배열과 1차원 배열을 변환하는 것은 어려운 작업이 아닙니다. 이 글에서는 몇 가지 구현 방법을 소개합니다.

다차원 배열과 1차원 배열이란 무엇입니까

PHP에서 배열은 매우 유용하고 일반적으로 사용되는 데이터 유형이며 실제 개발에서도 자주 사용됩니다. 요소를 저장하고 액세스하기 위한 일반 작업을 제공하는 것 외에도 PHP 배열은 복잡한 구조 데이터와 일부 간단한 데이터를 각각 저장하는 데 사용되는 다차원 배열과 1차원 배열을 사용할 수도 있습니다.

다차원 배열은 다른 배열이 배열 내부에 중첩되어 있음을 의미합니다. 즉, 배열 요소도 배열일 수 있지만 각 배열에는 논리적으로 고유한 키가 있어야 합니다. 예를 들어, 세 과목의 성적을 저장하는 데 사용되는 다차원 배열은 다음과 같이 나타낼 수 있습니다.

$score = array(
    "math" => array(
        "Tom" => 89,
        "Jerry" => 92,
        "John" => 76
    ),
    "english" => array(
        "Tom" => 78,
        "Jerry" => 85,
        "John" => 91
    ),
    "science" => array(
        "Tom" => 95,
        "Jerry" => 84,
        "John" => 88
    )
);
로그인 후 복사

반면 1차원 배열은 각 요소에 하나의 값만 포함하는 배열을 나타냅니다. 이 값은 문자열일 수 있습니다. 숫자 및 부울 값 등 1차원 배열의 키는 문자열이나 숫자일 수 있지만, 숫자 키의 값은 정수나 부동 소수점 숫자여야 합니다. 예:

$fruit = array("apple", "orange", "banana", "pear");
로그인 후 복사

다차원 배열을 1차원 배열로 변환

다차원 배열을 1차원 배열로 변환하는 것은 정렬, 비교, 검색 등이 필요한 일부 작업의 경우 매우 일반적인 작업입니다. 다차원 배열, 1차원 배열을 사용하는 것이 더 편리할 것입니다. 다음은 다차원 배열을 1차원 배열로 변환하는 두 가지 방법을 소개합니다.

방법 1: 재귀 함수 사용

재귀는 복잡한 다차원 배열 처리를 포함하여 많은 작업을 쉽게 처리할 수 있는 매우 강력한 방법입니다. 재귀 함수를 사용하여 다차원 배열을 1차원 배열로 변환하면 배열의 수준 수를 점진적으로 줄이고 결국 모든 요소를 ​​새로운 1차원 배열로 이동할 수 있습니다. 구체적인 구현은 다음과 같습니다.

function multi_to_one($multi_arr)
{
    static $result_arr = array();
    foreach ($multi_arr as $key => $val) {
        if (is_array($val)) {
            multi_to_one($val);
        } else {
            $result_arr[$key] = $val;
        }
    }
    return $result_arr;
}
로그인 후 복사

이 함수에서는 각 요소를 반복합니다. 현재 요소가 배열인 경우 해당 요소가 더 이상 배열이 아닐 때까지 재귀 작업을 수행합니다. 함수에 정의된 정적 배열 $result_arr에 현재 요소를 추가합니다. 마지막으로 처리된 1차원 배열을 반환합니다. $result_arr 中。最后,我们返回这个处理好的一维数组。

使用这个函数可以将上文中的多维数组 $score 转换为一维数组:

$result = multi_to_one($score);
print_r($result);
로그인 후 복사

输出结果为:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)
로그인 후 복사
로그인 후 복사

方法二:使用 array_walk_recursive 函数

PHP 中有一个专门用于遍历数组的函数 array_walk_recursive,它可以遍历多维数组中的每一个元素。这个函数可以接受一个回调函数作为第二个参数,我们可以在这个回调函数中操作元素并将它添加到新的一维数组中。下面是具体实现:

function flatten_array($multi_arr)
{
    $result_arr = array();
    array_walk_recursive($multi_arr, function($val, $key) use (&$result_arr) { $result_arr[$key] = $val; });
    return $result_arr;
}
로그인 후 복사

与第一个方法相比,这个方法使用了一个匿名函数来完成回调操作,这个函数使用了 use 关键字将外部变量 $result_arr 引入,并将处理好的元素存储在这个数组中。最后返回生成的一维数组。

使用这个函数也可以将上文的多维数组 $score 转换为一维数组:

$result = flatten_array($score);
print_r($result);
로그인 후 복사

输出结果为:

Array
(
    [Tom] => 95
    [Jerry] => 84
    [John] => 88
)
로그인 후 복사
로그인 후 복사

一维数组转多维数组

将一维数组转换为多维数组也是一个非常常见的需求,在实际应用中经常遇到需要根据某些条件对一维数组进行分组的情况。以下介绍了一种将一维数组转为多维数组的方法。

方法:使用 array_reduce 函数

array_reduce 是 PHP 中的一个高阶函数,它可以像 array_walk_recursive 一样遍历数组,但是与 array_walk_recursive 不同的是, array_reduce 还可以接受一个参数作为函数的初始值,这个值会成为每个回调函数的初始值传递给它们。 array_reduce 可以被用于各种类型的计算和处理操作,我们可以通过它来将一维数组转换为多维数组。

下面是具体实现:

function group_array($data_arr, $group_key)
{
    $result_arr = array_reduce($data_arr, function(&$result, $item) use ($group_key) {
        $index = $item[$group_key];
        if (!isset($result[$index])) {
            $result[$index] = array();
        }
        $result[$index][] = $item;
        return $result;
    }, array());

    return $result_arr;
}
로그인 후 복사

在这个函数中,我们使用了匿名函数来执行回调函数,在遍历数组时,如果当前元素的 $group_key 值还没有被加入到新的多维数组中,我们就创建一个新的数组元素作为其键,然后将当前元素添加到这个新数组的值中。在整个过程中,回调函数的第一个参数 $result

이 함수를 사용하여 위의 다차원 배열 $score를 1차원 배열로 변환합니다.

$data = array(
    array("id" => 1, "name" => "Tom", "group" => "A"),
    array("id" => 2, "name" => "Jerry", "group" => "A"),
    array("id" => 3, "name" => "John", "group" => "B"),
    array("id" => 4, "name" => "Smith", "group" => "C"),
);
로그인 후 복사
출력 결과는 다음과 같습니다.

$result = group_array($data, "group");
print_r($result);
로그인 후 복사
방법 2: array_walk_recursive 함수 사용

다음이 있습니다. PHP의 특수 함수 array_walk_recursive 함수는 배열을 탐색하는 데 사용됩니다. 이 함수는 다차원 배열의 각 요소를 탐색할 수 있습니다. 이 함수는 콜백 함수를 두 번째 매개변수로 받아들여 요소를 조작하고 이를 새로운 1차원 배열에 추가할 수 있습니다. 구체적인 구현은 다음과 같습니다.

Array
(
    [A] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Tom
                    [group] => A
                )

            [1] => Array
                (
                    [id] => 2
                    [name] => Jerry
                    [group] => A
                )

        )

    [B] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [name] => John
                    [group] => B
                )

        )

    [C] => Array
        (
            [0] => Array
                (
                    [id] => 4
                    [name] => Smith
                    [group] => C
                )

        )

)
로그인 후 복사

첫 번째 방법과 비교하여 이 방법은 익명 함수를 사용하여 콜백 작업을 완료합니다. 이 함수는 use 키워드를 사용하여 외부 변수 $를 설정합니다. result_arr 가 도입되고 처리된 요소가 이 배열에 저장됩니다. 마지막으로 생성된 1차원 배열이 반환됩니다.

이 함수를 사용하면 위의 다차원 배열 $score를 1차원 배열로 변환할 수도 있습니다. 🎜rrreee🎜출력 결과는 다음과 같습니다. 🎜rrreee🎜1차원 배열을 다중 배열로 변환 -차원 배열🎜🎜1차원 배열 변환 다차원 배열로 변환하는 것도 매우 일반적인 요구 사항입니다. 실제 응용에서는 1차원 배열을 특정 조건에 따라 그룹화해야 합니다. 다음은 1차원 배열을 다차원 배열로 변환하는 방법을 설명합니다. 🎜🎜방법: array_reduce 함수 사용 🎜🎜array_reduce는 PHP의 고차 함수로, array_walk_recursive와 같이 배열을 순회할 수 있지만 array_walk_recursive를 사용합니다. code> > 차이점은 <code>array_reduce도 매개변수를 함수의 초기값으로 받아들일 수 있으며, 이 값이 각 콜백 함수의 초기값이 되어 전달된다는 점입니다. array_reduce는 다양한 유형의 계산 및 처리 작업에 사용할 수 있으며, 1차원 배열을 다차원 배열로 변환하는 데 사용할 수 있습니다. 🎜🎜다음은 구체적인 구현입니다. 🎜rrreee🎜이 함수에서는 배열을 순회할 때 현재 요소의 $group_key 값이 없는 경우 익명 함수를 사용하여 콜백 함수를 실행합니다. 다차원 배열에서는 새 배열 요소를 키로 만든 다음 현재 요소를 이 새 배열의 값에 추가합니다. 전체 프로세스 동안 콜백 함수의 첫 번째 매개변수 $result는 처리된 다차원 선택 배열이 최종적으로 반환될 때까지 계속 수정되어 전달됩니다. 🎜🎜이 함수를 사용하여 1차원 배열을 변환합니다: 🎜rrreee🎜 "그룹" 키에 따라 다차원 배열로: 🎜rrreee🎜출력 결과는 다음과 같습니다: 🎜rrreee🎜결론🎜🎜다차원 배열의 변환 PHP의 배열과 1차원 배열은 일상적인 개발에서 자주 접하게 되는 요구 사항입니다. 재귀 함수나 고차 함수를 사용하여 다차원 배열을 1차원 배열로 변환하거나 1차원 배열을 다차원 배열로 변환할 수 있습니다. 실제 적용에서는 다양한 상황에 따라 다양한 방법을 선택하고 적절한 기능을 사용하여 변환을 완료해야 합니다. 🎜

위 내용은 PHP에서 다차원 배열을 1차원 배열로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿