PHP:يمكنني الإشارة عضو واحد من مجموعة التي يتم إرجاعها من خلال وظيفة ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أي فكرة كيف إذا ممكن في PHP في سطر واحد ?:

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

...لا يبدو أن تأخذ'.يجب أن أفعل هذا 2-السائر:

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

...مجرد فضول - لغات أخرى ألعب مع السماح مثل هذه الأمور و أنا كسول بما فيه الكفايه أن تفوت هذا في PHP ...أي نظرة تقدير ...

هل كانت مفيدة؟

المحلول

محاولة:

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

إذا كنت تبحث فقط عن العنصر الأول من الصفيف.

نصائح أخرى

@سكوت Reynen

هذا ليس صحيحا.هذا العمل:

list(,,$thirdElement) = $myArray;

للأسف هذا غير ممكن مع PHP.لديك لاستخدام اثنين من خطوط للقيام بذلك.

لك يمكن هل هذا في سطر واحد!استخدام array_shift().

<?php

echo array_shift(i_return_an_array());

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

عندما يتم تنفيذ هذا ، وسوف صدى "foo".

قائمة() مفيد هنا.مع أي ولكن أول عنصر الصفيف, سوف تحتاج إلى لوحة مع مجدية المتغيرات.على سبيل المثال:

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();

بقدر ما أعرف أن هذا غير ممكن, لقد أردت أن أفعل ذلك بنفسي عدة مرات.

http://us3.php.net/reset

متوفرة فقط في نسخة 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top