복붙노트

PHP에서 배열로부터 '열'을 추출하는 함수가 있습니까?

PHP

PHP에서 배열로부터 '열'을 추출하는 함수가 있습니까?

다음과 같은 구조의 배열이 있습니다.

array(array('page' => 'page1', 'name' => 'pagename1')
      array('page' => 'page2', 'name' => 'pagename2')
      array('page' => 'page3', 'name' => 'pagename3'))

'name'키의 값만 가진 새로운 배열을 반환하는 내장 함수가 있습니까? 그래서 나는 얻을 것입니다 :

array('pagename1', 'pagename2', 'pagename3')

해결법

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

    1.

    왜 함수가 내장되어 있어야합니까? 아니요, 아무 것도 없습니다. 직접 작성하십시오.

    이 스레드의 다른 스레드와는 달리 멋지고 쉬운 스레드가 있습니다.

    $namearray = array();
    
    foreach ($array as $item) {
        $namearray[] = $item['name'];
    }
    
  2. ==============================

    2.

    PHP 5.5에서 array_column ()을 사용할 수 있습니다 :

    <?php
    $samples=array(
                array('page' => 'page1', 'name' => 'pagename1'),
                array('page' => 'page2', 'name' => 'pagename2'),
                array('page' => 'page3', 'name' => 'pagename3')
                );
    $names = array_column($samples, 'name');
    print_r($names);
    

    실제 상황에서보기

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

    3.

    다음을 수행하는 기능적인 방법이 있습니다.

    $data = array(
                array('page' => 'page1', 'name' => 'pagename1'),
                array('page' => 'page2', 'name' => 'pagename2'),
                array('page' => 'page3', 'name' => 'pagename3'));
    
    $result = array_map(create_function('$arr', 'return $arr["name"];'), $data);
    print_r($result);
    
  4. ==============================

    4.

    잘있다. 최소한 PHP> 5.5.0 이상이면 array_column이라고합니다.

    PHP 함수는 선택적인 $ index_keyparameter를 취합니다 - PHP 웹 사이트에 따라 - 상태 :

    여기에 대한 답변에서 선택적 매개 변수없이 박탈 된 버전을 볼 수 있습니다. 나는 그것을 필요로했다, 그래서, 여기 완전한 기능이있다 :

    if (!function_exists('array_column')) {
        function array_column($array, $column, $index_key = null) {
            $toret = array();
            foreach ($array as $key => $value) {
                if ($index_key === null){
                    $toret[] = $value[$column];
                }else{
                    $toret[$value[$index_key]] = $value[$column];
                }
            }
            return $toret;
        }
    }
    
  5. ==============================

    5.

    fuentesjrs 솔루션과 비슷하지만 사용자 정의 콜백과 함께 array_walk ()를 사용하여 좀 더 일반 :

    // Define the callback
    function extract_named_sub_elements(&$item, $key, $name) {
      $item = $item[$name];
    }
    
    // Test data
    $original = array(
      array('page' => 'page1', 'name' => 'pagename1'),
      array('page' => 'page2', 'name' => 'pagename2'),
      array('page' => 'page3', 'name' => 'pagename3'),
    );
    
    // Use a copy, as array_walk() operates directly on the passed in array
    $copy = $original;
    
    // Substitute 'name' with whatever element you want to extract, e.g. 'page'
    array_walk($copy, 'extract_named_sub_elements', 'name');
    
    print_r($copy);
    
  6. ==============================

    6.

    if (!function_exists('array_column')) {
        function array_column($array,$column) {
        $col = array();
        foreach ($array as $k => $v) {
            $col[]=$v[$column];
        }
        return $col;
        }
    }
    

    이 기능은 PHP 버전이 5.5 미만인 경우 작동하며 함수가있는 경우 기능이 저하됩니다.

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

    7.

    예, 찾고있는 것을 수행하는 array_column이라는 PHP 내장 함수가 있습니다.

    $ name_keys = array_column ($ array, 'name')과 같이 호출 할 것입니다; 당신이 찾고있는 결과를 얻으려면.

    자세한 내용은 PHP 매뉴얼의 다음 항목을 참조하십시오.

    http://php.net/manual/en/function.array-column.php

  8. ==============================

    8.

    ArrayIterator 클래스를 확장하고 mixed current (void) 메서드를 재정의 할 수 있습니다.

    class Foo extends ArrayIterator {
      protected $index;
      public function __construct($array, $index) {
        parent::__construct($array);
        $this->index = $index;
      }
    
      public function current() {
        $c = parent::current();
        return isset($c[$this->index]) ? $c[$this->index] : null;
      }
    }
    
    $a = array(
      array('page' => 'page1', 'name' => 'pagename1'),
      array('name' => '---'),
      array('page' => 'page2', 'name' => 'pagename2'),
      array('page' => 'page3', 'name' => 'pagename3')
    );
    
    $f = new Foo($a, 'page');
    foreach($f as $e) {
      echo $e, "\n";
    }
    

    인쇄물

    page1
    
    page2
    page3
    
  9. ==============================

    9.

    나는 이것을 위해 함수를 내장 할 필요가 없다고 생각한다. 배열에 배열이있을 수 있습니다.

    $samples=array(
                array('page' => 'page1', 'name' => 'pagename1'),
                array('page' => 'page2', 'name' => 'pagename2'),
                array('page' => 'page3', 'name' => 'pagename3')
                );
    
    $output1=array();
    $output2=array();
    foreach($samples as $sample){
        array_push($output1,$sample['name']);
        $output2[]=array_splice($sample,1);
    
    }
    
    print_r($output1);
    print_r($output2);
    

    in $ output1은 'page'indexing '부분을 제거하고 $ output2 만 제거하려는 경우 원하는 출력입니다.

    해당 배열의 모든 값이 필요하고 배열에 숫자로 인덱스가 있다면 사용할 수 있습니다.

    $array_1=array_values($samples); 
    

    하지만 내가 이해하는 한, 당신은 이것을 원치 않았습니다.

  10. ==============================

    10.

    이것은 array_reduce에 대한 아주 쉬운 호출이다.

    $valuesOnly = array_reduce($modelData, function ($carry, $item) {
        return array_merge($carry, $item['id']);
    }, []);
    
  11. ==============================

    11.

    이전 질문인데도 여전히 관련성이 높고 많은 개발자가 PHP> = 5.5를 사용하지 않기 때문에 여기에 게시하고 싶습니다.

    다음과 같은 배열이 있다고 가정 해 보겠습니다.

    Array
    (
        [files] => Array
            (
                [name] => Array
                    (
                        [0] => file 1
                        [1] => file 2
                        [2] => file 3
                    )
    
                [size] => Array
                    (
                        [0] => 1
                        [1] => 2
                        [2] => 3
                    )
    
                [error] => Array
                    (
                        [0] => abc
                        [1] => def
                        [2] => ghi
                    )
    
            )
    
    )
    

    원하는 결과물은 다음과 같습니다.

    Array
    (
        [0] => Array
            (
                [0] => file 1
                [1] => 1
                [2] => abc
            )
    
        [1] => Array
            (
                [0] => file 2
                [1] => 2
                [2] => def
            )
    
        [2] => Array
            (
                [0] => file 3
                [1] => 3
                [2] => ghi
            )
    
    )
    

    다음과 같이 첫 번째 매개 변수로 전달 된 함수 이름없이 array_map () 메서드를 사용하면됩니다.

    array_map(null, $a['files']['name'], $a['files']['size'], $a['files']['error']);
    

    불행히도 둘 이상의 배열을 전달할 경우 키를 매핑 할 수 없습니다.

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

    12.

    array_values를 의미합니까?

    편집 : 주석없는 downvote 주셔서 감사. 함수에 대한 문서를 실제로 볼 시간을 가졌다면, 사용자는 자신의 array_values_recursive 함수를 작성하는 예제를 제공하는 첫 번째 주석을 보았을 것입니다. 그것을 array_walk와 결합하면 'name'열을 하드 코딩하지 않아도 될 멋진 기능을 얻을 수 있습니다. 쳇.

  13. ==============================

    13.

    PHP 5.5에서 array_column이 원하는 것입니다.

    실제로는 몇 가지 가능한 용도가 있습니다.

    아래의 샘플 배열을 사용하여 array_column을 사용하는 여러 가지 방법이 있습니다.

    $a = array(
        array('id' => '1', 'name' => 'Joe'),
        array('id' => '2', 'name' => 'Jane')
    );
    

    배열로 단일 열 검색

    $b = array_column($a, 'name');
    

    줄까요? 정상적인 배열 당 0부터 시작하는 자동 키를 확인하십시오.

    $b[0] = 'Joe';
    $b[1] = 'Jane';
    

    컬럼을 인덱스로 갖는 전체 배열 검색.

    $c = array_column($a, NULL, 'id');
    

    결과는 다음과 같습니다.

    $c[1] = array('id' => '1', 'name' => 'Joe');
    $c[2] = array('id' => '2', 'name' => 'Jane');
    

    세 번째 매개 변수로 선택한 열이 각 항목의 키가되는 방식에 주목하고 두 번째 매개 변수를 null로 설정하여 전체 배열을 가져옵니다.

    물론 마지막 사용법은 두 번째 매개 변수와 세 번째 매개 변수를 설정하는 것입니다.

    $d = array_column($a, 'name', 'id');
    

    다음과 같이 당신에게 줄 것입니다.

    $d[1] = 'Joe';
    $d[2] = 'Jane';
    

    개인적으로 선택 옵션 목록을 작성하기 위해 전체 3 개의 매개 변수를 사용합니다. 옵션이있는 테이블이있는 경우 테이블을 쿼리하고 결과를 가져 와서이 값으로 전달하여 값과 레이블로 키가있는 목록을 가져옵니다. 이것은 색인으로도 교차해야하는 정보 세트를 작성하는 훌륭한 방법입니다.

  14. from https://stackoverflow.com/questions/1494953/is-there-a-function-to-extract-a-column-from-an-array-in-php by cc-by-sa and MIT lisence