복붙노트

배열의 최초의 요소를 가져옵니다.

PHP

배열의 최초의 요소를 가져옵니다.

배열이 있습니다.

배열 (4 => '사과', 7 => '오렌지', 13 => '매화')

이 배열의 첫 번째 요소를 얻고 싶습니다. 예상 결과 : 문자열 사과

하나의 요구 사항 : 참조로 전달할 수 없으므로 array_shift는 좋은 해결책이 아닙니다.

어떻게해야합니까?

해결법

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

    1.원래 답은 값 비쌌지만 (O (n)) :

    원래 답은 값 비쌌지만 (O (n)) :

    array_shift(array_values($array));
    

    O (1)에서 :

    array_pop(array_reverse($array));
    

    다른 유스 케이스에 대한 의견의 제안으로 편집 됨 ...

    $ array의 (배열 포인터 재설정과 관련하여) 수정이 문제가되지 않는다면 다음을 사용할 수 있습니다 :

    reset($array);
    

    배열 "복사"가 필요한 경우 이론적으로 더 효율적이어야합니다.

    array_shift(array_slice($array, 0, 1)); 
    

    PHP 5.4 이상 (그러나 비어있는 경우 색인 오류가 발생할 수 있음) :

    array_values($array)[0];
    
  2. ==============================

    2.Mike가 지적한대로 (가능한 가장 쉬운 방법) :

    Mike가 지적한대로 (가능한 가장 쉬운 방법) :

    $arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
    echo reset($arr); //echoes "apple"
    

    키를 얻으려면 : (리셋 후 실행)

    echo key($arr); //echoes "4"
    

    PHP의 문서에서 :

    기술:

  3. ==============================

    3.

    $first_value = reset($array); // First Element's Value
    $first_key = key($array); // First Element's Key
    

    희망이 도움이됩니다. :)

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

    4.

    $arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
    echo reset($arr); // echoes 'apple'
    

    현재 포인터 위치를 잃고 싶지 않으면 배열의 별칭을 만드십시오.

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

    5.언어 구성 "list"를 사용하여 N 번째 요소를 가져올 수 있습니다.

    언어 구성 "list"를 사용하여 N 번째 요소를 가져올 수 있습니다.

    // 1st item
    list($firstItem) = $yourArray;
    
    // 1st item from an array that is returned from function
    list($firstItem) = functionThatReturnsArray();
    
    // 2nd item
    list( , $secondItem) = $yourArray;
    

    array_keys 함수를 사용하면 키에 대해 동일한 작업을 수행 할 수 있습니다.

    list($firstKey) = array_keys($yourArray);
    list(, $secondKey) = array_keys($yourArray);
    
  6. ==============================

    6.현재 ($ 배열)

    현재 ($ 배열)

    PHP Manual에 따라 배열의 첫 번째 원소를 얻을 수있다.

    그래서 배열 포인터를 다시 위치시킬 때까지 작동합니다. 그렇지 않으면 배열을 재설정해야합니다.

  7. ==============================

    7.PHP 5.4 이상 :

    PHP 5.4 이상 :

    array_values($array)[0];
    
  8. ==============================

    8.가정하자.

    가정하자.

    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    

    그냥 사용 :

    $array[key($array)]
    

    첫 번째 요소를 얻거나

    key($array)
    

    첫 번째 키를 얻으려면.

    또는 제거하려는 경우 첫 번째 링크를 해제 할 수 있습니다.

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

    9.일부 배열은 list, reset 또는 current와 같은 함수에서는 작동하지 않습니다. 어쩌면 그들은 "가짜"배열 일 수도 있습니다 - 예를 들어 ArrayIterator를 부분적으로 구현합니다.

    일부 배열은 list, reset 또는 current와 같은 함수에서는 작동하지 않습니다. 어쩌면 그들은 "가짜"배열 일 수도 있습니다 - 예를 들어 ArrayIterator를 부분적으로 구현합니다.

    배열에 관계없이 첫 번째 값을 가져 오려면 반복기를 단락시킬 수 있습니다.

    foreach($array_with_unknown_keys as $value) break;
    

    그러면 값이 $ value에서 사용 가능 해지고 첫 번째 반복 이후 루프가 중단됩니다. 이는 잠재적으로 큰 배열을 array_unshift (array_values ​​($ arr))와 같은 함수에 복사하는 것보다 효율적입니다.

    이 방법으로 키를 가져올 수도 있습니다.

    foreach($array_with_unknown_keys as $key=>$value) break;
    

    함수에서 this를 호출하는 경우 일찍 반환하십시오.

    function grab_first($arr) {
        foreach($arr as $value) return $value;
    }
    
  10. ==============================

    10.간단히 :

    간단히 :

    array_shift(array_slice($array,0,1));
    
  11. ==============================

    11.나는 echo current ($ array)를 할 것이다.

    나는 echo current ($ array)를 할 것이다.

  12. ==============================

    12.

    $arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    foreach($arr as $first) break;
    echo $first;
    

    산출:

    apple
    
  13. ==============================

    13.

    $array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    
    $firstValue = each($array)[1];
    

    each () 함수는 전체 배열을 복사하지 않기 때문에 array_values ​​()보다 훨씬 효율적입니다.

    자세한 정보는 http://www.php.net/manual/en/function.each.php를 참조하십시오.

  14. ==============================

    14.

    $myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
    $arrayKeys = array_keys($myArray);
    
    // the first element of your array is:
    echo $myArray[$arrayKeys[0]];  
    
  15. ==============================

    15.Laravel의 도우미들로부터 :

    Laravel의 도우미들로부터 :

    function head($array)
    {
        return reset($array);
    }
    

    값이 함수에 전달되는 배열 인 경우 reset ()은 배열 복사본의 내부 포인터에 영향을 미치며 원래 배열에는 영향을 미치지 않습니다. (배열이 비어 있으면 false를 반환합니다)

    사용 예 :

    $data = ['foo', 'bar', 'baz'];
    
    current($data); // foo
    next($data); // bar
    head($data); // foo
    next($data); // baz
    

    또한, 여기에 대안이 있습니다. 매우 빠르지 만 더 흥미 롭습니다. 배열이 비어 있으면 기본값을 쉽게 변경할 수 있습니다.

    function head($array, $default = null)
    {
        foreach ($array as $item) {
            return $item;
        }
    
        return $default;
    }
    
  16. ==============================

    16.이 작품의 대부분! 하지만 빠른 단일 회선 (자원 부족) 통화의 경우 :

    이 작품의 대부분! 하지만 빠른 단일 회선 (자원 부족) 통화의 경우 :

    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    echo $array[key($array)];
    
    // key($array) -> will return the first key (which is 4 in this example)
    
  17. ==============================

    17.이 간단한 유지! 정답은 많지만 모든 혼란을 최소화합니다. 이 두 가지가 작동하고 많은 오버 헤드가 줄어 듭니다.

    이 간단한 유지! 정답은 많지만 모든 혼란을 최소화합니다. 이 두 가지가 작동하고 많은 오버 헤드가 줄어 듭니다.

    key ($ array) = 배열의 첫 번째 키를 얻습니다. 현재 ($ 배열) = 배열의 첫 번째 값을 가져옵니다.

  18. ==============================

    18.kludgy 방법은 다음과 같습니다.

    kludgy 방법은 다음과 같습니다.

    $foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    
    function get_first ($foo) {
        foreach ($foo as $k=>$v){
            return $v;
        }
    }
    
    print get_first($foo);
    
  19. ==============================

    19.첫 번째 요소 가져 오기 :

    첫 번째 요소 가져 오기 :

    array_values($arr)[0]
    

    마지막 요소 가져 오기

    array_reverse($arr)[0]
    
  20. ==============================

    20.array_values를 사용하는 것이 최선의 방법 일 것이라고 생각합니다. 함수의 결과에서 인덱스 0의 값을 반환하여 '사과'를 얻을 수 있습니다.

    array_values를 사용하는 것이 최선의 방법 일 것이라고 생각합니다. 함수의 결과에서 인덱스 0의 값을 반환하여 '사과'를 얻을 수 있습니다.

  21. ==============================

    21.이것은 게임에 조금 늦었지만 배열 요소가 그 안에 자식으로 포함 된 배열에 문제가 발생하여 첫 번째 배열 요소의 문자열 표현을 얻을 수 없었습니다. PHP의 current () 함수를 사용하여 다음과 같이 관리했습니다.

    이것은 게임에 조금 늦었지만 배열 요소가 그 안에 자식으로 포함 된 배열에 문제가 발생하여 첫 번째 배열 요소의 문자열 표현을 얻을 수 없었습니다. PHP의 current () 함수를 사용하여 다음과 같이 관리했습니다.

    <?php
        $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
        reset($original);  // to reset the internal array pointer...
        $first_element = current($original);  // get the current element...
    ?>
    

    현재의 모든 솔루션 덕분에이 답변을 얻을 수있었습니다. 언젠가 누군가에게 도움이되기를 바랍니다.

  22. ==============================

    22.Sarfraz가 게시 한 내용에 대한 작은 변경 사항은 다음과 같습니다.

    Sarfraz가 게시 한 내용에 대한 작은 변경 사항은 다음과 같습니다.

    $array = array(1, 2, 3, 4, 5);
    $output = array_slice($array, 0, 1);
    print_r ($output);
    
  23. ==============================

    23.용도:

    용도:

    $first = array_slice($array, 0, 1);  
    $val= $first[0];
    

    기본적으로 array_slice는 키를 보존하지 않으므로 안전하게 0을 인덱스로 사용할 수 있습니다.

  24. ==============================

    24.현실 세계에서 이것은 단순한 반응이 아닙니다. 우리는이 도서관에서 찾을 수있는 가능성있는 응답의 예를 가지고 있습니다.

    현실 세계에서 이것은 단순한 반응이 아닙니다. 우리는이 도서관에서 찾을 수있는 가능성있는 응답의 예를 가지고 있습니다.

    $array1 = array();
    $array2 = array(1,2,3,4);
    $array3 = array('hello'=>'world', 'foo'=>'bar');
    $array4 = null;
    
    var_dump( 'reset1', reset($array1) );
    var_dump( 'reset2', reset($array2) );
    var_dump( 'reset3', reset($array3) );
    var_dump( 'reset4', reset($array4) ); // warning
    
    var_dump( 'array_shift1', array_shift($array1) );
    var_dump( 'array_shift2', array_shift($array2) );
    var_dump( 'array_shift3', array_shift($array3) );
    var_dump( 'array_shift4', array_shift($array4) ); // warning
    
    var_dump( 'each1', each($array1) );
    var_dump( 'each2', each($array2) );
    var_dump( 'each3', each($array3) );
    var_dump( 'each4', each($array4) ); // warning
    
    var_dump( 'array_values1', array_values($array1)[0] ); // Notice
    var_dump( 'array_values2', array_values($array2)[0] );
    var_dump( 'array_values3', array_values($array3)[0] );
    var_dump( 'array_values4', array_values($array4)[0] ); // warning
    
    var_dump( 'array_slice1', array_slice($array1, 0, 1) );
    var_dump( 'array_slice2', array_slice($array2, 0, 1) );
    var_dump( 'array_slice3', array_slice($array3, 0, 1) );
    var_dump( 'array_slice4', array_slice($array4, 0, 1) );  // warning
    
    list($elm) = $array1; //Notice
    var_dump($elm);
    list($elm) = $array2;
    var_dump($elm);
    list($elm) = $array3; // Notice
    var_dump($elm);
    list($elm) = $array4;
    var_dump($elm);
    

    보시다시피, 우리는 어떤 경우에는 잘 작동하는 몇 가지 '한줄'해결책을 가지고 있지만 전부는 아닙니다.

    내 생각에, 당신은 그 배열에서만 배열을 처리해야한다.

    이제 우리는 항상 배열을 가지고 있다고 가정하면서 성능에 대해 이야기합니다.

    $elm = empty($array)? null : ...($array);
    
    ...you would use without errors:
    $array[count($array)-1] ;
    array_shift
    reset
    array_values
    array_slice
    

    array_shift가 더 빠르며 [count () - 1]보다 빠르며이 세 가지가 더 빠릅니다. array_values ​​및 array_slice

  25. ==============================

    25.두 가지 해결책이 있습니다.

    두 가지 해결책이 있습니다.

    해결 방법 1 - 키만 사용하십시오. 당신은 그것을 사용할 수 없다고 말하지 않았습니다. :)

    <?php
    // get first element of this array. 
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    
    // gets the first element by key
    $result = $array[4];
    
    //Expected result: string apple
    assert('$result === "apple" /* Expected result: string apple. */');
    ?>
    

    해결책 2 - array_flip () + key ()

    <?php
    // get first element of this array. Expected result: string apple
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    
    // turn values to keys
    $array = array_flip($array);
    
    // you might, thrown an reset in
    // just to make sure that the array pointer is at first element
    // also reset return the first element
    // reset($myArray);
    
    // return first key 
    $firstKey = key($array); 
    
    assert('$firstKey === "apple" /* Expected result: string apple. */');
    ?>
    

    해결 방법 3 - array_keys ()

    echo $array[array_keys($array)[0]];
    
  26. ==============================

    26.또한 철저한 검사가 비쌀 수도 있고 항상 필요한 것은 아니므로이 작업을 수행하는 상황을 염두에 두어야합니다.

    또한 철저한 검사가 비쌀 수도 있고 항상 필요한 것은 아니므로이 작업을 수행하는 상황을 염두에 두어야합니다.

    예를 들어,이 솔루션은 내가 그것을 사용하고있는 상황에 대해 잘 작동하지만 (분명히 모든 경우에 의존 할 수는 없다 ...)

     /**
     * A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
     * <br/>
     * 1) All the keys are strings - i.e. associative<br/>
     * or<br/>
     * 2) All the keys are numeric - i.e. not associative<br/>
     * 
     * @param array $objects
     * @return boolean
     */
    private function isAssociativeArray(array $objects)
    {
        // This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
        // which we're using it.
    
        reset($objects);
        return count($objects) > 0 && is_string(key($objects));
    }
    
  27. ==============================

    27."list"예제가 마음에 들지만 "list"는 할당의 왼쪽에서만 작동합니다. 변수를 할당하고 싶지 않으면 임시 이름을 만들어야합니다. 임시 이름은 범위를 오염시키고 최악의 경우 기존 값을 덮어 씁니다.

    "list"예제가 마음에 들지만 "list"는 할당의 왼쪽에서만 작동합니다. 변수를 할당하고 싶지 않으면 임시 이름을 만들어야합니다. 임시 이름은 범위를 오염시키고 최악의 경우 기존 값을 덮어 씁니다.

    list($x) = some_array();
    var_dump($x);
    

    위의 코드는 $ x의 기존 값을 덮어 쓰며 $ x 변수는이 범위가 활성 상태 인 동안 중단됩니다 (이 함수 / 메서드의 끝 또는 최상위 수준 인 경우 영원히 종료). 이것은 call_user_func와 익명의 함수를 사용하여 해결할 수 있습니다,하지만 그것은 clunky입니다 :

    var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
                            some_array()));
    

    이와 같이 익명의 함수를 사용하면, 참조에 의한 패스를 사용하고 있어도, 실제로는 reset 및 array_shift를 사용할 수 있습니다. 이것은 함수를 호출하면 인수가 바인드되고 이러한 인수는 참조로 전달 될 수 있기 때문입니다.

    var_dump(call_user_func(function($arr) { return reset($arr); },
                            array_values(some_array())));
    

    그러나 call_user_func가이 임시 할당을 내부적으로 수행하기 때문에 이것은 실제로 과도 함입니다. 이것은 pass-by-reference 함수를 아무런 경고 나 에러없이 pass-by-value처럼 처리 할 수 ​​있습니다 :

    var_dump(call_user_func('reset', array_values(some_array())));
    
  28. ==============================

    28.오래된 게시물이지만 어쨌든 ... 필자는 STRICT를 생성하지 않고 일부 함수 (예 : mysql_fetch_row)에서 가져온 후 배열의 첫 번째 요소를 얻는 방법을 찾고 있었다고 상상해보십시오. "변수 만 참조로 전달해야합니다." 그렇다면 여기에 설명 된 모든 방법으로이 메시지를 얻을 수 있으며 일부는 배열 (또는 그 일부)을 복제하는 추가 메모리를 많이 사용합니다. 피할 수있는 쉬운 방법은 해당 함수를 호출하기 전에 값을 인라인으로 지정하는 것입니다.

    오래된 게시물이지만 어쨌든 ... 필자는 STRICT를 생성하지 않고 일부 함수 (예 : mysql_fetch_row)에서 가져온 후 배열의 첫 번째 요소를 얻는 방법을 찾고 있었다고 상상해보십시오. "변수 만 참조로 전달해야합니다." 그렇다면 여기에 설명 된 모든 방법으로이 메시지를 얻을 수 있으며 일부는 배열 (또는 그 일부)을 복제하는 추가 메모리를 많이 사용합니다. 피할 수있는 쉬운 방법은 해당 함수를 호출하기 전에 값을 인라인으로 지정하는 것입니다.

    $first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
    // or
    $first_item_of_array = reset($tmp_arr = func_get_my_huge_array());
    

    이렇게하면 로그에서 STRICT 메시지를 화면에 표시하지 않고 추가 배열을 만들지 않습니다. 그것은 인덱스와 연관 어레이 모두에서 작동합니다

  29. ==============================

    29.array_keys ()를 사용하여 연관 배열의 키에 숫자 인덱스 배열로 액세스 한 다음 다시 배열의 키로 사용할 수 있습니다.

    array_keys ()를 사용하여 연관 배열의 키에 숫자 인덱스 배열로 액세스 한 다음 다시 배열의 키로 사용할 수 있습니다.

    해가 arr [0] 인 경우 :

    변수를 사용하고 하나를 빼서 논리를 구할 수 있습니다. 1 => '사과'.

    $i = 1;
    $arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    echo $arr[array_keys($arr)[$i-1]];
    

    산출:

    apple
    

    단순함을 위해 다음을 사용하십시오.

    $arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
    echo $arr[array_keys($arr)[0]];
    

    산출:

    apple
    

    첫 번째 방법은 첫 번째 요소가 아니라 인덱싱 된 배열과 같은 연관 배열을 처리 할 수 ​​있습니다.

  30. ==============================

    30.배열의 내부 포인터를 놀리는 것이 싫지만 array_keys () 또는 array_values ​​()를 사용하여 두 번째 배열을 작성하는 것이 비효율적이므로 보통 다음과 같이 정의합니다.

    배열의 내부 포인터를 놀리는 것이 싫지만 array_keys () 또는 array_values ​​()를 사용하여 두 번째 배열을 작성하는 것이 비효율적이므로 보통 다음과 같이 정의합니다.

    function array_first(array $f) {
        foreach ($f as $v) {
            return $v;
        }
        throw new Exception('array was empty');
    }
    
  31. from https://stackoverflow.com/questions/1921421/get-the-first-element-of-an-array by cc-by-sa and MIT license