PHP:Posso fazer referência a um único membro de uma matriz retornada por uma função?

StackOverflow https://stackoverflow.com/questions/68711

  •  09-06-2019
  •  | 
  •  

Pergunta

alguma ideia de como é possível o seguinte em PHP como uma única linha?:

<?php
$firstElement = functionThatReturnsAnArray()[0];

...Não parece 'pegar'.Eu preciso fazer isso como um 2-stepper:

<?php
$allElements = functionThatReturnsAnArray();
$firstElement = $allElements[0];

...só por curiosidade - outras linguagens com as quais brinco permitem coisas assim, e tenho preguiça de sentir falta disso em PHP ...qualquer visão apreciada ...

Foi útil?

Solução

Tentar:

<?php
$firstElement = reset(functionThatReturnsAnArray());

Se você está apenas procurando o primeiro elemento do array.

Outras dicas

@Scott Reynen

isso não é verdade.Isso funcionará:

list(,,$thirdElement) = $myArray;

Infelizmente, isso não é possível com PHP.Você tem que usar duas linhas para fazer isso.

Você pode faça isso em uma linha!Usar array_shift().

<?php

echo array_shift(i_return_an_array());

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

Quando isso for executado, irá ecoar "foo".

list() é útil aqui.Com qualquer elemento do array, exceto o primeiro, você precisará preenchê-lo com variáveis ​​inúteis.Por exemplo:

list( $firstElement ) = functionThatReturnsAnArray();
list( $firstElement , $secondElement ) = functionThatReturnsAnArray();

E assim por diante.

Na verdade, eu uso uma função de conveniência que escrevi para tais fins:

/**
 * 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;
    }
}

então você apenas chama assim:

$result = array_key_value(getMeAnArray(), 'arrayKey');

Você pode usar array_slice(), igual a:

$elementX = array_slice(functionThatReturnsAnArray(), $x, 1);

Também notei que end() não é mencionado.Ele retorna o último elemento de um array.

Qualquer current($array) ou array_shift($array) vai funcionar, o primeiro vai sair do variedade intacto.

nickf, é bom saber, obrigado.Infelizmente, isso tem problemas de legibilidade além de algumas vírgulas.

Acho que qualquer uma das opções acima exigiria um comentário para explicar o que você está fazendo, tornando-se assim duas linhas.Acho mais simples de fazer:

$element = functionThatReturnsArray();
$element = $element[0];

Dessa forma, você não está usando uma variável extra e fica óbvio o que você está fazendo.

$firstItem = current(returnsArray());

Bem, descobri algumas maneiras de conseguir o que deseja sem chamar outra função.

$firstElement = ($t = functionThatReturnsAnArray()) ? $t[0] : false;

e para strings você poderia usar

$string = (($t = functionThatReturnsAnArray())==0) . $t[0];

..Problema interessante

Draco

Suponho que esta seja uma função integrada ou de biblioteca, pois parece que você não pode editá-la diretamente.Eu recomendo criar uma função wrapper para fornecer a saída necessária:

function functionThatReturnsOneElement( $arg )
{
    $result = functionThatReturnsAnArray( $arg );
    return $result[0];
}
$firstElement = functionThatReturnsOneElement();

Tanto quanto sei, isso não é possível, já quis fazer isso várias vezes.

http://us3.php.net/reset

Disponível apenas na versão 5 do php.

Se for sempre o primeiro elemento, você provavelmente deveria pensar em fazer com que a função retorne apenas o primeiro item do array.Se esse for o caso mais comum, você poderia usar um pouco de frieza:

function func($first = false) {
    ...
    if $first return $array[0];
    else return $array;
}

$array = func();
$item = func(true);

Meu php está um pouco enferrujado, mas tenho certeza que funciona.

Você também pode consultar array_shift() e array_pop().

Provavelmente isso também é possível:

array(func())[0][i];

O 0 é para a função.

Às vezes eu mudo a função, para que ela possa retornar opcionalmente um elemento em vez do array inteiro:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top