php의 arayphp로 맵 설치하기

29896 단어 PHPCtech
안녕하세요ω╹๑ )
오늘은 PHP의 Aray입니다.PHP로 맵을 설치해보세요!
array_map의 동작 규격은 공식 참조와 같다!
C 언어에서 PHParray_map의 정의는 엄격하게 실시하려고 했는데 이번에는 언급하지 않겠습니다.

저차원맵 설치하기


조금씩 본래의 방법에 접근하는 형식으로 실현하다.

callback 함수에서 허용하는 값은value뿐입니다


기본적
  • 고급 함수
  • 가변 함수
  • 참조 배송
  • 귀속 처리
  • 내부 포인터 조작
  • 이루어질 것 같아서요.
    <?php
    
    
    function getNextValue(&$array){
        $value = current($array);
        next($array);
        return $value;
    }
    
    function isEndValue($array, $value){
        end($array);
        return current($array) === $value;
    }
    
    function __array_map($callback, $array) {
        $result = [];
        $value = getNextValue($array);
        $result[] = $callback($value);
    
        if (!isEndValue($array, $value)) {
            $result = array_merge($result, __array_map($callback, $array));
        }
        return $result;
    }
    
    $array = [
        "key1" => "value1",
        "key2" => "value2",
        "key3" => "value3",
    ];
    
    $callback = function($value){
        return $value . " Hello!";
    };
    
    
    $result = __array_map($callback, $array);
    print_r($result);
    
    /*
    [
        "value1 Hello!",
        "value2 Hello!",
        "value3 Hello!",
    ]
    */
    
    저층 레이크를 설치하면 먼저 이렇게 될 것 같아.
    그러나 이 실시 방식이라면callable 함수에서 되돌아오는 값은 원래의 키를 유지할 수 없습니다.

    원래 키의 설치를 유지하기 위해 수정


    <?php
    
    
    function getNextValue(&$array){
        $value = current($array);
        $cp_array = $array;
        $key = array_flip($cp_array)[$value];
        next($array);
        return ["key" => $key, "value" => $value];
    }
    
    function isEndValue($array, $value){
        end($array);
        return current($array) === $value;
    }
    
    function __array_map($callback, $array) {
        $result = [];
        $next = getNextValue($array);
        $key = $next["key"];
        $value = $next["value"];
        $result[$key] = $callback($value);
    
        if (!isEndValue($array, $value)) {
            $result = array_merge($result, __array_map($callback, $array));
        }
        return $result;
    }
    
    $array = [
        "key1" => "value1",
        "key2" => "value2",
        "key3" => "value3",
    ];
    
    $callback = function($value){
        return $value . " Hello!";
    };
    
    
    $result = __array_map($callback, $array);
    print_r($result);
    
    /*
    [
        "key1" => "value1 Hello!",
        "key2" => "value2 Hello!",
        "key3" => "value3 Hello!",
    ]
    */
    
    기본적으로 참고 교부 후current지침에서value를 얻을 때 키를 추출하면 문제가 없다고 생각합니다.
    function getNextValue(&$array){
        $value = current($array);
        $cp_array = $array;
        $key = array_flip($cp_array)[$value];
        next($array);
        return ["key" => $key, "value" => $value];
    }
    
    주의사항 참조$arrayarray_flip에서 키,value를 반전시킬 때
  • 깊이 복사$arrayarray_flip
  • 2회array_flip
  • 내 생각엔 누구야?
    그리고 배열된 사이즈는 당연히 가변적이기 때문에 전체 스캐닝을 피해야 한다.
    이런 의도로 깊이 있게 복제하다.
    그러나 이렇게 되면 콜백 함수는 키를 스캔할 수 없습니다.
    그럼 원래array_map 규격에 가깝죠.

    콜백 함수로 키를 스캔하기 위해 수정을 시도해 봅니다


    이 점에 순조롭게 접근할 수 있다면, 한 가지 더!
    <?php
    
    function getNextValue(&$array){
        $value = current($array);
        $cp_array = $array;
        $key = array_flip($cp_array)[$value];
        next($array);
        return ["key" => $key, "value" => $value];
    }
    
    function isEndValue($array, $value){
        end($array);
        return current($array) === $value;
    }
    
    function __array_map($callback, $array) {
        $result = [];
        $next = getNextValue($array);
        $key = $next["key"];
        $value = $next["value"];
        $result[$key] = $callback($value, $key);
    
        if (!isEndValue($array, $value)) {
            $result = array_merge($result, __array_map($callback, $array));
        }
        return $result;
    }
    
    $array = [
        "key1" => "value1",
        "key2" => "value2",
        "key3" => "value3",
    ];
    
    $callback = function($value, $key){
        return $value . " " . $key;
    };
    
    
    $result = __array_map($callback, $array);
    print_r($result);
    
    /*
    [
        "key1" => "value1 key1",
        "key2" => "value2 key2",
        "key3" => "value3 key3",
    ]
    */
    
    PHP
    call先に明示されている引数の個数 < call元に明示されている引数の個数
    
    상기 사건에서 처리되지 않음Warning
    $result[$key] = $callback($value, $key);
    
    이렇게 injection$key하면 간단하게 실현할 수 있습니다.
    $callback = function($value, $key){
        return $value . " " . $key;
    };
    
    따라서 콜백 함수 측면에서 실시해도
    $callback = function($value){
        return $value . " Hello!";
    };
    
    처럼 설치하더라도 예상대로 작동합니다.
    그리고 array_map에 분배된 첫 번째 인자의Callable 함수에서
    스캔한value를 반환하기 위해 합리적인 설치를 실현한 것 같습니다.
    또한 콜백 함수는 콜의 방법으로 가변 함수를 사용했다call_user_func_array를 사용해도 같은 설치를 할 수 있을 것 같습니다.

    총결산


    웹 영역보다는 로우엔드 영역을 선호합니다.
    어쨌든 무의식적인 실복에서 저층을 떠올리면서 뇌 단련을 해요.
    2021년도 잘 부탁드립니다!

    좋은 웹페이지 즐겨찾기