복붙노트

PHP : 배열 값을 즉시 접근

PHP

PHP : 배열 값을 즉시 접근

PHP에서는 배열을 사용하여 변수를 매핑해야하는 경우가 종종 있습니다. 그러나 한 라이너에서이 작업을 수행 할 수없는 것 같습니다. c.f. 예:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

이것은 사소한 문제이지만, 때때로 한 번씩 도청을 계속합니다 ... 나는 아무것도 좋아하지 않는 변수를 사용한다는 사실을 좋아하지 않습니다.)

해결법

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

    1.나는 그 여분의 변수에 대해 정말로 신경 쓰지 않을 것이다. 그래도 사용했다면 메모리에서 제거 할 수 있습니다.

    나는 그 여분의 변수에 대해 정말로 신경 쓰지 않을 것이다. 그래도 사용했다면 메모리에서 제거 할 수 있습니다.

    $variable = array('a','b','c');
    echo $variable[$key];
    unset($variable);
    

    또는 작은 함수를 작성할 수 있습니다.

    function indexonce(&$ar, $index) {
      return $ar[$index];
    }
    

    이것을 다음과 같이 호출하십시오.

    $something = indexonce(array('a', 'b', 'c'), 2);
    

    어레이는 이제 자동으로 파괴되어야합니다.

  2. ==============================

    2.기술적 인 대답은 PHP 언어의 문법은 변수 표현식의 끝에서 첨자 표기법 만 허용하고 일반 표현식은 허용하지 않는다는 점입니다. 이것은 다른 언어에서 작동하는 방식입니다. 저는 항상 언어의 결함으로 보았습니다. 어떤 식에 대해서도 아래 첨자를 모호하지 않게 해석 할 수있는 문법을 사용하는 것이 가능하기 때문입니다. 그러나 유연하지 못한 파서 생성기를 사용하고 있거나 이전 버전과의 호환성을 무너 뜨리고 싶지 않을 수도 있습니다.

    기술적 인 대답은 PHP 언어의 문법은 변수 표현식의 끝에서 첨자 표기법 만 허용하고 일반 표현식은 허용하지 않는다는 점입니다. 이것은 다른 언어에서 작동하는 방식입니다. 저는 항상 언어의 결함으로 보았습니다. 어떤 식에 대해서도 아래 첨자를 모호하지 않게 해석 할 수있는 문법을 사용하는 것이 가능하기 때문입니다. 그러나 유연하지 못한 파서 생성기를 사용하고 있거나 이전 버전과의 호환성을 무너 뜨리고 싶지 않을 수도 있습니다.

    다음은 유효한 표현식에 대한 잘못된 하위 첨자의 몇 가지 예입니다.

    $x = array(1,2,3);
    print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.
    
    function ret($foo) { return $foo; }
    echo ret($x)[1]; // illegal, on a call expression, not a variable exp.
    
  3. ==============================

    3.이를 배열 역 참조라고합니다. 5.4에 추가되었습니다. http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

    이를 배열 역 참조라고합니다. 5.4에 추가되었습니다. http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

    update [2012-11-25] : PHP 5.5부터 역 참조 (contreant / strings)와 배열 (array)에 역 참조 (dereferencing)가 추가되었습니다.

  4. ==============================

    4.이것은 직접 관련이 없을 수도 있습니다.하지만이 특정 문제에 대한 해결책을 찾는이 게시물에 왔습니다.

    이것은 직접 관련이 없을 수도 있습니다.하지만이 특정 문제에 대한 해결책을 찾는이 게시물에 왔습니다.

    다음과 같은 형식의 함수에서 결과를 얻었습니다.

    Array
    (
        [School] => Array
                (
                    [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
                )
    )
    

    내가 원했던 것은 parent_id 값 "9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a"이었습니다. 나는이 같은 기능을 사용하고 그것을 얻었다.

    array_pop( array_pop( the_function_which_returned_the_above_array() ) )
    

    그래서 한 줄로 끝났습니다 :) 희망 그것은 누군가에게 도움이 될 것입니다.

  5. ==============================

    5.

    function doSomething()
    {
        return $somearray;
    }
    
    echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();
    
  6. ==============================

    6.사실, 우아한 해결책이 있습니다 :) 다음은 myfunc에 의해 반환 된 배열의 세 번째 요소를 $ myvar에 할당합니다.

    사실, 우아한 해결책이 있습니다 :) 다음은 myfunc에 의해 반환 된 배열의 세 번째 요소를 $ myvar에 할당합니다.

    $myvar = array_shift(array_splice(myfunc(),2));
    
  7. ==============================

    7.또는 변수에 배열 값이 필요한 경우

    또는 변수에 배열 값이 필요한 경우

    $variable = array('a','b','c');
    $variable = $variable[$key];
    
  8. ==============================

    8.php array_ * 함수를 사용하여 몇 가지 oneliners를 만들 수 있습니다. 그러나 나는 당신이 달성하고자하는 것을 비교하는 것이 전체적으로 중복됨을 확신합니다.

    php array_ * 함수를 사용하여 몇 가지 oneliners를 만들 수 있습니다. 그러나 나는 당신이 달성하고자하는 것을 비교하는 것이 전체적으로 중복됨을 확신합니다.

    예를 들어 다음과 같은 것을 사용할 수는 있지만 우아한 해결책은 아니며이 성능에 대해서는 확신 할 수 없습니다.

       array_pop ( array_filter( array_returning_func(), function($key){    return $key=="array_index_you_want"? TRUE:FALSE;    },ARRAY_FILTER_USE_KEY ) );
    

    PHP 프레임 워크를 사용하고 있고 이전 버전의 PHP가 붙어있는 경우 대부분의 프레임 워크가 라이브러리를 지원합니다.

    예 : Codeigniter 배열 도우미

  9. ==============================

    9.dereferencing이 PHP> = 5.4에 추가되었지만 3 행 연산자를 사용하여 한 행에서 수행 할 수있었습니다.

    dereferencing이 PHP> = 5.4에 추가되었지만 3 행 연산자를 사용하여 한 행에서 수행 할 수있었습니다.

    echo $var=($var=array(0,1,2,3))?$var[3]:false;
    

    이 방법은 배열 변수를 유지하지 않습니다. 당신은 그것을하기 위해 여분의 함수를 필요로하지 않습니다 ... 만약이 라인이 함수에서 사용된다면 자동적으로 끝에서 파괴 될 것입니다. 그러나 사용되지 않으면 나중에 코드에서 unset으로 말한 것처럼 스스로 파괴 할 수도 있습니다 함수에서.

  10. from https://stackoverflow.com/questions/13109/php-access-array-value-on-the-fly by cc-by-sa and MIT license