2014-02-28 3 views
30

파이썬과 다른 언어에서 우리는 튜플에 액세스하여 의미 론적으로 또는 다른 방식으로 데이터 구조화를 용이하게 할 수 있음을 알고 있습니다.PHP에 튜플이 있습니까?

제 질문은 : PHP에 튜플이 있습니까?

그렇지 않은 경우 가장 가까운 시설은 무엇입니까?

답변

21

사람들이 모든 것을 위해 사용하는 PHP의 유일한 실제 데이터 구조는 배열입니다.

PHP의 배열은 모두 해시 테이블이며 숫자 또는 문자열 인덱스를 가질 수 있으며 무엇이든 포함 할 수 있습니다 (일반적으로 배열이 더 많음).

튜플처럼 작동하는 배열 구조가 몇 가지 있습니다.

http://us1.php.net/manual/en/language.types.array.php

http://us1.php.net/list

를 참조 목록은 함수에서 여러 값을 반환하는 매우 편리합니다. PHP에서

+1

그래, 배열은 기본적으로 튜플입니다. $ var1과 $ var2를 초기화 할'list ($ var1, $ var2) = $ someArray;를 사용할 수도 있습니다. – Daniel

+1

그것이 무엇인지 추측합니다 :) 고마워요. – brian

23

배열은 매우 튜플처럼 사용할 수 있습니다 :

// one dimensional mixed data 
$x = array(1, 2, "hello"); 

// multidimensional third element 
$y = array(1, 2, array(3, 4, 5)); 

// assigning to variables (list unpacking) 
list($a, $b, $c) = $x; //$a is 1, $b is 2, $c is "hello" 

유일한 문제 차이점은 또 다시 array를 계속 입력해야하는 방법이다. 튜플만큼 좋지는 않습니다.

업데이트 - PHP 5.4부터 array()을 대괄호 []으로 바꿀 수 있습니다. 위의 예는이 지금처럼 보일 수 있습니다

// one dimensional mixed data 
$x = [1, 2, "hello"]; 

// multidimensional third element 
$y = [1, 2, [3, 4, 5]]; 
+12

새로운 PHP 구문 "[]"이 (가) 없습니다. – CMCDragonkai

3

https://coderwall.com/p/bah4oq에서 :

function foo() 
{ 
    return array('foo', 'bar'); 
} 

list($a, $b) = foo(); 

당신은 튜플처럼 사용하는 객체의 배열을 전달할 수 있습니다. 또한 이질성 유형을 배열에 한 번에 저장할 수 있습니다.이 유형은 튜플의 기능을 매우 유사하게 모방합니다.

1

앞의 해답은 PHP 배열을 사용하여 튜플을 시뮬레이션 할 수 있다는 점에서 모든 유스 케이스가 아닌 제한된 의미로만 사용되었습니다. 맵의 키로 튜플을 사용하고자 할 때 분명합니다. 예 :

(currState, Event) -> newState 

우리가 이런 일을 PHP에서 적절한 튜플 지원을 할 수 있었다면 :

$trTable = [ 
    ['currState', 'fooEvent'] => 'fooState', 
    ['currState', 'barEvent'] => 'barState', 
    ... 
]; 

대신에 우리가 그것을 시뮬레이션 할 수있는 상태 머신을 구현할 때, 당신의 전환 테이블의 키는 튜플 것 예 :

$trTable = [ 
    'currState' => [ 
     'fooEvent' => 'fooState', 
     'barEvent' => 'barState', 
    ], 
    ... 
]; 

두 결과 모두 동일한 결과를 얻지 만 첫 번째 것은 명확한 의미를가집니다.

관련 문제