source

PHP에는 데이터 구조가 내장되어 있습니까?

manysource 2023. 1. 17. 21:22

PHP에는 데이터 구조가 내장되어 있습니까?

PHP 매뉴얼을 보고 있는데 목록이나 집합과 같은 대부분의 언어가 가지고 있는 데이터 구조에 대한 섹션이 보이지 않습니다.제가 눈이 멀었을 뿐인가요, 아니면 PHP에는 이런 기능이 내장되어 있지 않나요?

PHP의 유일한 네이티브 데이터 구조는 배열입니다.다행히 어레이는 매우 유연하며 해시 테이블로도 사용할 수 있습니다.

http://www.php.net/array

다만, C++ STL의 클론인 SPL이 있습니다.

http://www.php.net/manual/en/book.spl.php

PHP는 표준 PHP 라이브러리(SPL) 기본 확장을 통해 데이터 구조를 제공합니다. 이 확장 기능은 기본적으로 PHP 5.0.0에서 사용 가능하고 컴파일됩니다.

제공되는 데이터 구조는 PHP 5 > = 5.3.0에서 사용할 수 있으며 다음을 포함합니다.

이중 링크 리스트

Double Linked List(DLL; 이중 링크 목록)는 양방향으로 서로 연결된 노드의 목록입니다.기본 구조가 DLL인 경우 반복자의 작업, 양 끝에 대한 액세스, 노드 추가 또는 제거 비용은 O(1)입니다.따라서 스택과 큐에 적절한 구현을 제공합니다.

수북이

힙은 힙 속성을 따르는 트리와 같은 구조입니다.각 노드는 힙에 대해 글로벌한 구현된 비교 방법을 사용하여 비교할 때 하위 노드보다 크거나 같습니다.

어레이

배열은 인덱스를 통해 액세스할 수 있는 연속적인 방식으로 데이터를 저장하는 구조입니다.이들을 PHP 어레이와 혼동하지 마십시오.PHP 어레이는 실제로는 순서가 지정된 해시 테이블로 구현됩니다.

지도

맵은 키와 값의 쌍을 유지하는 데이터 구조입니다.PHP 배열은 정수/문자열에서 값까지의 맵으로 볼 수 있습니다.SPL은 객체에서 데이터로의 맵을 제공합니다.이 맵은 오브젝트 세트로도 사용할 수 있습니다.

출처 : http://php.net/manual/en/spl.datastructures.php

은 PHP 7이라는 확장 했습니다.ds어레이의 대체 수단으로서 특수한 데이터 구조를 제공합니다.

ds ,

  • 는 을 합니다.Ds\임스스네
  • 에는 3개의 즉 3개의 인터페이스가 있습니다.Collection,Sequence ★★★★★★★★★★★★★★★★★」Hashable
  • 즉, 8개의 클래스가 있습니다.Vector,Deque ,Queue,PriorityQueue,Map,Set,Stack , , , , 입니다.Pair

상세한 것에 대하여는, 메뉴얼을 참조해 주세요.또, 이 블로그 투고에는 벤치마크를 포함한 훌륭한 정보가 게재되어 있습니다.

연관 배열은 대부분의 기본 데이터 구조 해시 테이블, 대기열, 스택에 사용할 수 있습니다.하지만 트리나 힙과 같은 것을 원한다면 기본적으로는 존재하지 않는다고 생각하지만 어디에나 무료 라이브러리가 있을 것입니다.

어레이가 스택 사용을 에뮬레이트하도록 하려면array_push()더하다array_pop()벗다

어레이가 큐를 에뮬레이트하도록 하려면array_push()큐잉하다array_shift()큐잉을 해제하다

연관 배열은 기본적으로 해시입니다.PHP에서는 인덱스로 문자열을 사용할 수 있으므로 예상대로 작동합니다.

$array['key'] = 'value';

마지막으로 공간을 낭비할 가능성이 있는 어레이를 사용하여 바이너리 트리를 에뮬레이트할 수 있습니다.작은 나무를 갖게 될 것을 알고 있으면 도움이 됩니다.선형 배열을 사용하면 (i) 인덱스에 대해 왼쪽 아이를 인덱스(2i+1)에 배치하고 오른쪽 아이를 인덱스(2i+2)에 배치한다고 말할 수 있습니다.

문서에서는 JavaScript 어레이를 보다 높은 수준의 데이터 구조를 에뮬레이트하는 방법에 대해 자세히 설명합니다.

PHP에는 실제로는 연관 배열이며 집합으로도 사용할 수 있는 배열이 있습니다.많은 인터프리터 언어와 마찬가지로 PHP는 다른 명시적 데이터 유형을 제공하는 대신 이 모든 것을 하나의 후드로 제공합니다.

예.

$lst = array(1, 2, 3);
$hsh = array(1 => "This", 2 => "is a", 3 => "test");

또한 매뉴얼을 살펴보세요.

PHP의 배열은 목록과 사전을 겸합니다.

$myArray = array("Apples", "Oranges", "Pears");
$myScalar = $myArray[0] // == "Apples"

또는 관련 배열로 사용하는 방법:

$myArray = array("a"=>"Apples", "b"=>"Oranges", "c"=>"Pears");
$myScalar = $myArray["a"] // == "Apples"

좀 더 구체적으로 말씀해주셨으면 합니다만, 데이터 구조라고 하면 제 마음은 몇 가지 방향으로 가고 있습니다.

어레이 - 충분히 문서화되어 있으며, 에서 이용할 수 있습니다.(http://us.php.net/manual/en/book.array.php)

SQL 데이터 - 사용 중인 데이터베이스에 따라 다르지만 대부분 사용할 수 있습니다.(http://us.php.net/manual/en/book.mysql.php)

OOP - 버전에 따라 객체를 설계 및 구현할 수 있습니다.(http://us.php.net/manual/en/language.oop.php) 저는 이것을 php 사이트에서 찾기 위해 OOP를 검색해야 했습니다.

물론 PHP는 데이터 구조를 가지고 있습니다.php의 배열은 놀라울 정도로 유연합니다.몇 가지 예:

$foo = array(
  'bar' => array(1,'two',3),
  'baz' => explode(" ", "Some nice words")
);

또한 구조체의 매핑/필터링/워크/etc, 변환, 플립, 리버스 등에 사용할 수 있는 어레이 기능이 매우 풍부합니다.

PHP에 특정 유형의 데이터 구조가 포함되어 있지 않다고 생각되면 언제든지 직접 만들 수 있습니다.예를 들어 어레이에 의해 지원되는 단순한 데이터 집합 구조를 보여 줍니다.

class ArraySet
{
    /** Elements in this set */
    private $elements;

    /** the number of elements in this set */
    private $size = 0;

    /**
     * Constructs this set.
     */ 
    public function ArraySet() {
        $this->elements = array();
    }

    /**
     * Adds the specified element to this set if 
     * it is not already present.
     * 
     * @param any $element
     *
     * @returns true if the specified element was
     * added to this set.
     */
    public function add($element) {
        if (! in_array($element, $this->elements)) {
            $this->elements[] = $element;
            $this->size++;
            return true;
        }
        return false;
    }

    /**
     * Adds all of the elements in the specified 
     * collection to this set if they're not already present.
     * 
     * @param array $collection
     * 
     * @returns true if any of the elements in the
     * specified collection where added to this set. 
     */ 
    public function addAll($collection) {
        $changed = false;
        foreach ($collection as $element) {
            if ($this->add($element)) {
                $changed = true;
            }
        }
        return $changed;
    }

    /**
     * Removes all the elements from this set.
     */ 
    public function clear() {
        $this->elements = array();
        $this->size = 0;
    }

    /**
     * Checks if this set contains the specified element. 
     * 
     * @param any $element
     *
     * @returns true if this set contains the specified
     * element.
     */ 
    public function contains($element) {
        return in_array($element, $this->elements);
    }

    /**
     * Checks if this set contains all the specified 
     * element.
     * 
     * @param array $collection
     * 
     * @returns true if this set contains all the specified
     * element. 
     */ 
    public function containsAll($collection) {
        foreach ($collection as $element) {
            if (! in_array($element, $this->elements)) {
                return false;
            }
        }
        return true;
    }

    /**
     * Checks if this set contains elements.
     * 
     * @returns true if this set contains no elements. 
     */ 
    public function isEmpty() {
        return count($this->elements) <= 0;
    }

    /**
     * Get's an iterator over the elements in this set.
     * 
     * @returns an iterator over the elements in this set.
     */ 
    public function iterator() {
        return new SimpleIterator($this->elements);
    }

    /**
     * Removes the specified element from this set.
     * 
     * @param any $element
     *
     * @returns true if the specified element is removed.
     */ 
    public function remove($element) {
        if (! in_array($element, $this->elements)) return false;

        foreach ($this->elements as $k => $v) {
            if ($element == $v) {
                unset($this->elements[$k]);
                $this->size--;
                return true;
            }
        }       
    }

    /**
     * Removes all the specified elements from this set.
     * 
     * @param array $collection
     *
     * @returns true if all the specified elemensts
     * are removed from this set. 
     */ 
    public function removeAll($collection) {
        $changed = false;
        foreach ($collection as $element) {
            if ($this->remove($element)) {
                $changed = true;
            } 
        }
        return $changed;
    }

    /**
     * Retains the elements in this set that are
     * in the specified collection.  If the specified
     * collection is also a set, this method effectively
     * modifies this set into the intersection of 
     * this set and the specified collection.
     * 
     * @param array $collection
     *
     * @returns true if this set changed as a result
     * of the specified collection.
     */ 
    public function retainAll($collection) {
        $changed = false;
        foreach ($this->elements as $k => $v) {
            if (! in_array($v, $collection)) {
                unset($this->elements[$k]);
                $this->size--;
                $changed = true;
            }
        }
        return $changed;
    }

    /**
     * Returns the number of elements in this set.
     * 
     * @returns the number of elements in this set.
     */ 
    public function size() {
        return $this->size; 
    }

    /**
     * Returns an array that contains all the 
     * elements in this set.
     * 
     * @returns an array that contains all the 
     * elements in this set.
     */ 
    public function toArray() {
        $elements = $this->elements;
        return $elements;   
    }
}

PHP는 "다차원 배열" 또는 "매트릭스"라고 불리는 배열도 가질 수 있습니다.2차원 배열, 3차원 배열 등이 가능합니다.

언급URL : https://stackoverflow.com/questions/22401/does-php-have-built-in-data-structures