PHP: Ben bir işlev tarafından döndürülen bir dizinin tek bir üye başvuruda miyim?

16 Cevap php

nasıl olursa aşağıdaki tek bir satır olarak PHP mümkün olan herhangi bir fikir?:

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

... Bu 'almak' görünmüyor. Ben 2-step olarak bunu yapmak gerekiyor:

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

Sadece ... meraklı - Diğer diller Ben böyle şeyleri izin oynamak, ve ben ... herhangi bir fikir takdir PHP bu kaçırmak enoug tembelim ...

16 Cevap

Deneyin:

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

Sadece dizinin ilk elemanı arıyorsanız.

@ Scott Reynen

bu doğru değil. Bu çalışacaktır:

list(,,$thirdElement) = $myArray;

Ne yazık ki, PHP ile mümkün değildir. Bunu yapmak için iki hat kullanmak zorunda.

Sen can tek satırda bunu! Kullan array_shift().

<?php

echo array_shift(i_return_an_array());

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

Bu çalıştırıldığında, bu echo "foo" olacaktır.

list () burada yararlıdır. Ilk dizi elemanı ancak herhangi bir ile, gereksiz değişkenler ile pad onu gerekir. Örneğin:

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

Ve böylece.

Geçerli ($ dizi) veya array_shift ($ dizi) Ya çalışacak, eski bozulmamış dizi bırakacaktır.

Aslında ben bu tür amaçlar için yazdığı bir kolaylık işlevini kullanın:

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

o zaman sadece bu yüzden gibi diyoruz:

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

Bunu gibi, array_slice() kullanabilirsiniz:

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

Ayrıca end() sözü olmadığını fark ettim. Bir dizinin son öğeyi döndürür.

nickf, bilmek iyi, teşekkürler. Ne yazık ki bir kaç virgülle ötesinde okunabilirlik sorunları var.

Ben yukarıdaki herhangi bir nedenle iki satır oluyor, ne yaptığınızı açıklamak için bir yorum gerektirir düşünüyorum. Ben daha basit yapmak bulmak:

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

Bu şekilde, size ekstra bir değişken kullanarak değiliz ve ne yaptığınızı açıktır.

Eh, başka bir işlev çağırarak olmadan istediğinizi elde etmek için yollar bir çift bulduk.

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

ve dizeleri sizin için kullanabilirsiniz

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

.. İlginç bir sorun

Drakon

Ben bunu doğrudan düzenleyemezsiniz gibi geliyor çünkü bu, yerleşik bir veya kütüphane işlevi olduğunu tahmin ediyorum. Ben size ihtiyacınız çıkış vermek için bir sarıcı işlevi oluşturma öneriyor:

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

Bildiğim kadarıyla bu mümkün değil biliyorum, ben kendimi bu birkaç kez yapmak istedim.

http://us3.php.net/reset

Php sürüm 5 yalnızca kullanılabilir.

Her zaman ilk elemanı ise, muhtemelen işlevi dizideki sadece ilk öğeyi döndürmek sahip düşünmek gerekir. Bu en sık karşılaşılan durum ise, serinlik biraz kullanabilirsiniz:

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

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

Benim php biraz paslı, ama ben çalıştığını eminim.

Ayrıca) (array_shift bakmak () ve array_pop edebilirsiniz.

Bu, aynı zamanda, muhtemelen mümkündür:

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

0 fonksiyonu içindir.

Bazen işlevini değiştirmek gerekir, bu nedenle isteğe bağlı yerine tüm dizinin bir öğe dönebilirsiniz:

<?php
function functionThatReturnsAnArray($n = NULL) {
  return ($n === NULL ? $myArray : $myArray[$n]);
}
$firstElement = functionThatReturnsAnArray(0);