문제

PHP에서는 배열을 사용하여 변수를 매핑해야 하는 경우가 많습니다.하지만 한 줄로 이 작업을 수행할 수는 없을 것 같습니다.참조예:

// the following results in an error:
echo array('a','b','c')[$key];

// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];

이건 사소한 문제인데 가끔씩 계속 버그가 발생합니다...나는 변수를 아무것도 사용하지 않는다는 사실을 좋아하지 않습니다.)

도움이 되었습니까?

해결책

나는 실제로 그 추가 변수에 대해 신경 쓰지 않을 것입니다.하지만 원하는 경우 사용한 후 메모리에서 제거할 수도 있습니다.

$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

또는 다음과 같이 작은 함수를 작성할 수도 있습니다.

function indexonce(&$ar, $index) {
  return $ar[$index];
}

다음과 같이 호출하세요.

$something = indexonce(array('a', 'b', 'c'), 2);

이제 배열이 자동으로 삭제됩니다.

다른 팁

기술적인 대답은 다음과 같습니다. 문법 PHP 언어에서는 끝 부분에만 아래 첨자 표기를 허용합니다. 변수 표현식 그리고는 아니다 표현 일반적으로 이것이 대부분의 다른 언어에서도 작동하는 방식입니다.나는 항상 그것을 언어의 결함으로 여겼습니다. 왜냐하면 모든 표현에 대해 첨자를 명확하게 해결하는 문법을 갖는 것이 가능하기 때문입니다.그러나 유연하지 못한 파서 생성기를 사용하고 있거나 단순히 일종의 하위 호환성을 깨고 싶지 않은 경우도 있습니다.

다음은 유효한 표현식에 잘못된 첨자의 몇 가지 예입니다.

$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.

function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.

이를 배열 역참조라고 합니다.PHP 5.4에서 추가되었습니다.http://www.php.net/releases/NEWS_5_4_0_alpha1.txt

업데이트[2012-11-25]: PHP 5.5부터 배열뿐만 아니라 상수/문자열에도 역참조가 추가되었습니다.

직접적인 관련은 없을 수도 있겠네요..하지만 저는 이 특정 문제에 대한 해결책을 찾기 위해 이 게시물을 찾았습니다.

다음 형식의 함수에서 결과를 얻었습니다.

Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

내가 원했던 것은 parent_id 값 "9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a"였습니다.이런 기능을 사용해서 얻었습니다.

array_pop( array_pop( the_function_which_returned_the_above_array() ) )

그래서, 그것은 한 줄로 이루어졌습니다 :) 누군가에게 도움이되기를 바랍니다.

function doSomething()
{
    return $somearray;
}

echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();

실제로 우아한 해결책이 있습니다. 다음은 myfunc에서 반환된 배열의 세 번째 요소를 $myvar에 할당합니다.

$myvar = array_shift(array_splice(myfunc(),2));

또는 변수에 배열 값이 필요한 경우 이와 유사합니다.

$variable = array('a','b','c');
$variable = $variable[$key];

여러 가지가 있습니다 원라이너 당신은 PHP를 사용하여 생각해 낼 수 있습니다 정렬_* 기능.그러나 그렇게 하는 것은 당신이 달성하고자 하는 것을 비교하는 것은 완전히 중복되는 일이라는 것을 확신합니다.

예를 들어 다음과 같은 것을 사용할 수 있지만 이는 우아한 솔루션이 아니며 성능이 확실하지 않습니다.

   array_pop ( array_filter( array_returning_func(), function($key){    return $key=="array_index_you_want"? TRUE:FALSE;    },ARRAY_FILTER_USE_KEY ) );

PHP 프레임워크를 사용하고 있고 이전 버전의 PHP를 사용하고 있다면 대부분의 프레임워크에는 도움이 되는 라이브러리가 있습니다.

예:Codeigniter 배열 도우미

역참조가 PHP >=5.4에 추가되었다는 사실은 삼항 연산자를 사용하여 한 줄로 수행할 수 있었습니다:

echo $var=($var=array(0,1,2,3))?$var[3]:false;

이렇게 하면 배열을 변수로만 유지하지 않습니다.그리고 이를 수행하기 위해 추가 기능이 필요하지 않습니다...이 줄이 함수에 사용되면 마지막에 자동으로 삭제되지만 다음과 같이 직접 삭제할 수도 있습니다. unset 함수에서 사용되지 않는 경우 나중에 코드에서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top