2009-11-30 7 views
2

array() "생성자"를 사용하지 않고 PHP => 연산자 (?)를 사용할 수 있습니까? 방법이 있나요 대신PHP : 배열없이 => 연산자 사용

keysAndValues(array(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
)); 

function keysAndValues($items) { 
    /* ... */ 
} 

keysAndValues(
    'key1' => 'value1', 
    'key2' => 'value2', 
    'key3' => 'value3' 
); 

:

구체적으로는, 나는 배열로 포장하지 않고 키와 값의 목록을하는 함수를 만들려면 이것을하기 위해?

+0

나는 이미 대답을 받아 들였지만 나는 가짜 해결책으로 찔렀다. –

+0

이것은 문자열에서만 작동하며보다 다양한 솔루션을 원했습니다. – LiraNuna

+0

키 값 쌍 목록 *은 사실 배열 (적어도 PHP에서는)이므로 배열에 래핑 할 때의 문제점은 무엇입니까? PHP 인터프리터가 여러분이 제안하는 구문을 구현한다면, 실제로는'array()'를 실제로 입력하는 것에서 벗어나 일반적인 배열로 구현할 것입니다. – Petruza

답변

4

이들은 인수로 명명됩니다. 아니, PHP에서는 불가능합니다. 그들 주위에 배열()을 싸야 할 것입니다.

my_function(array("number" => "one")); // Will output "Number is: one" 
: 당신하지만 당신은 함수 내에서 배열과 함께 일해야한다는 사실을 괴롭 히고 배열이 아니라면

,

function my_function($array) 
{ 
extract($array); 
... 
if (isset($number)) echo "Number is: ".$number; 
} 

함수의 범위에 옵션을 풀고하려고

foreach().

+0

명명 된 인수! 그게 하나야. PHP 개발 팀이 거부 한이 버그 보고서 http://bugs.php.net/bug.php?id=22216에 저를 포함 시켰습니다. 고맙습니다. – LiraNuna

+0

'목표가 일종의 사전 클래스이기 때문에 실제로 문제가되는 배열이 아닌 경우'입니다. 생성자에게 변수를 보내는 더 좋은 방법이 있는지 궁금 해서요. – LiraNuna

0

아니라, 구체적으로는, '=>'조작자가 키를 나타내고, 값 쌍 insid하여 하나씩 개봉의 번거 로움을 절약 배열이므로 실제로 배열의 생성자 외부에서을 사용하는 이유는 없습니다. 말했다

, 당신이 당신이 원하는 것을 얻을 수있는 가장 가까운 것은 사용하는 것입니다 배열

foreach ($arr as $key=>$val) 
1

의 각 항목에 대한 키와 값을 잡기 위해 'foreach는'루프 같은 것들을 내에서 사용된다 동적 인수.

잠재적 인 솔루션을 제공하기 위해 여기에있는 해킹을 this tutorial/overview입니다 사용 :

function keysAndValues() { 
    for($i = 0 ; $i < func_num_args(); $i++) { 
     list($key, $value) = explode('=>', func_get_arg($i)); 
     // Do something with the $key and $value 
    } 
} 
그것은 다음과 같이 호출 할 것이다

: 기본적으로

keysAndValues('key1=>value1','key2=>value2','key3=>value3'); 
keysAndValues('key1=>value1'); 

, 당신의 금액을 가질 수를 매개 변수 ... 그들은 동적입니다!

+2

와우, 그건 해커 야. 가장 큰 문제점은' '=>''를 포함 할 수없는 문자열 만 전달할 수 있다는 것입니다. 여기에 배열을 사용하는 것이 더 좋을뿐만 아니라 코드도 적을 것입니다. 그래도 좋은 해킹. : oP – deceze

+1

하하 .. 확실하게 :) 그러나 그는 모든 키를 문자열로 나열했습니다 ...그래서 그들은'=>'을 포함하지 않는 한, –