PHP:함수에서 반환되는 배열의 단일 멤버를 참조할 수 있나요?
문제
PHP에서 다음이 한 줄로 가능한지 어떻게 알 수 있습니까?
<?php
$firstElement = functionThatReturnsAnArray()[0];
...'걸어'는 아닌 것 같습니다.이 작업을 2단계로 수행해야 합니다.
<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];
...그냥 궁금해서요. 제가 사용하는 다른 언어에서는 이런 일이 허용되는데, PHP에서 이것을 놓치기에는 너무 게으릅니다...어떤 통찰력이라도 감사하겠습니다 ...
해결책
노력하다:
<?php
$firstElement = reset(functionThatReturnsAnArray());
배열의 첫 번째 요소를 찾고 있는 경우.
다른 팁
@스콧 레이넨
그건 사실이 아니야.이것은 작동합니다:
list(,,$thirdElement) = $myArray;
불행히도 PHP에서는 불가능합니다.이를 수행하려면 두 줄을 사용해야합니다.
너 ~할 수 있다 한 줄로 하세요!사용 배열_시프트().
<?php
echo array_shift(i_return_an_array());
function i_return_an_array() {
return array('foo', 'bar', 'baz');
}
이것이 실행되면 "foo
".
list()는 여기서 유용합니다.첫 번째 배열 요소를 제외한 모든 요소는 쓸모 없는 변수로 채워야 합니다.예를 들어:
list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();
등등.
나는 실제로 다음과 같은 목적으로 작성한 편의 함수를 사용합니다.
/**
* Grabs an element from an array using a key much like array_pop
*/
function array_key_value($array, $key) {
if(!empty($array) && array_key_exists($key, $array)) {
return $array[$key];
}
else {
return FALSE;
}
}
그런 다음 다음과 같이 호출하면 됩니다.
$result = array_key_value(getMeAnArray(), 'arrayKey');
당신이 사용할 수있는 array_slice()
, 다음과 같습니다:
$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);
또한 end()
언급되지 않았습니다.배열의 마지막 요소를 반환합니다.
어느 하나 current($array)
또는 array_shift($array)
작동할 것이고, 전자는 떠날 것이다. 정렬 손대지 않은.
nickf, 알아가서 다행이네요, 고마워요.불행히도 몇 개의 쉼표를 넘어서는 가독성 문제가 있습니다.
위의 내용 중 무엇을 하고 있는지 설명하려면 주석이 필요하므로 두 줄이 됩니다.나는 다음과 같이 하는 것이 더 간단하다고 생각합니다.
$element = functionThatReturnsArray();
$element = $element[0];
이렇게 하면 추가 변수를 사용하지 않고 수행 중인 작업이 명확해집니다.
$firstItem = current(returnsArray());
글쎄, 나는 다른 함수를 호출하지 않고도 원하는 것을 얻을 수 있는 몇 가지 방법을 찾았습니다.
$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;
문자열의 경우 사용할 수 있습니다
$string = (($t = functionThatReturnsAnArray())==0) . $t[0];
..흥미로운 문제
드라코
직접 편집할 수 없는 것 같아서 내장 기능이나 라이브러리 기능인 것으로 추측됩니다.필요한 출력을 제공하기 위해 래퍼 함수를 만드는 것이 좋습니다.
function functionThatReturnsOneElement( $arg )
{
$result = functionThatReturnsAnArray( $arg );
return $result[0];
}
$firstElement = functionThatReturnsOneElement();
이것이 불가능하다는 것을 아는 한, 나는 이것을 여러 번 직접 해보고 싶었습니다.
PHP 버전 5에서만 사용할 수 있습니다.
항상 첫 번째 요소인 경우 함수가 배열의 첫 번째 항목만 반환하도록 하는 것을 고려해야 합니다.이것이 가장 일반적인 경우라면 약간의 멋짐을 사용할 수 있습니다.
function func($first = false) {
...
if $first return $array[0];
else return $array;
}
$array = func();
$item = func(true);
내 PHP는 약간 녹슬었지만 작동한다고 확신합니다.
array_shift() 및 array_pop()을 볼 수도 있습니다.
이것은 아마도 가능할 수도 있습니다:
array(func())[0][i];
0은 함수입니다.
때로는 함수를 변경하여 선택적으로 전체 배열 대신 요소를 반환할 수도 있습니다.
<?php
function functionThatReturnsAnArray($n = NULL) {
return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);