على - دوال المصفوفات php




الحصول على العنصر الأول من المصفوفة (20)

لدي صفيف:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

أود الحصول على العنصر الأول من هذه المجموعة. النتيجة المتوقعة: سلسلة apple

شرط واحد: لا يمكن أن يتم مع تمرير بالإشارة ، لذا فإن array_shift ليس حلا جيدا.

كيف يمكنني أن أفعل هذا؟


PHP 5.4+:

array_values($array)[0];

أعتقد أن استخدام array_values سيكون أفضل رهان هنا. يمكنك إرجاع القيمة الموجودة في الفهرس صفر من نتيجة تلك الوظيفة للحصول على "تفاحة".


اثنين من الحلول بالنسبة لك.

الحل 1 - فقط استخدم المفتاح. لم تقل ، أنه لا يمكنك استخدامه. :)

<?php
// get first element of this array. 
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

// gets the first element by key
$result = $array[4];

//Expected result: string apple
assert('$result === "apple" /* Expected result: string apple. */');
?>

الحل 2 - array_flip () + مفتاح ()

<?php
// get first element of this array. Expected result: string apple
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

// turn values to keys
$array = array_flip($array);

// you might, thrown an reset in
// just to make sure that the array pointer is at first element
// also reset return the first element
// reset($myArray);

// return first key 
$firstKey = key($array); 

assert('$firstKey === "apple" /* Expected result: string apple. */');
?>

الحل 3 - array_keys ()

echo $array[array_keys($array)[0]];

استخدم array_keys() للوصول إلى مفاتيح صفيف الارتباط الخاص بك كمصفوفة رقمية مفهرسة ، والتي يمكن استخدامها مرة أخرى كمفتاح للمصفوفة.

عندما يكون الحل arr[0] :

(لاحظ أنه نظرًا لأن الصفيف الذي يحتوي على المفاتيح هو مؤشر يستند إلى 0 ، فإن العنصر الأول هو الفهرس 0)

يمكنك استخدام متغير ثم طرح ، للحصول على المنطق الخاص بك ، أن 1 => 'apple' .

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];

انتاج:

apple

حسنا ، من أجل البساطة ، استخدم فقط:

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[0]];

انتاج:

apple

من خلال الطريقة الأولى ليس فقط العنصر الأول ، ولكن يمكن علاج صفيف جمعيات مثل صفيف مفهرس.


افترض:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

مجرد استخدام:

$array[key($array)]

للحصول على العنصر الأول أو

key($array)

للحصول على المفتاح الأول.

أو يمكنك إلغاء ربط الأول إذا كنت تريد إزالته.


الإجابة الأصلية ، ولكنها مكلفة (O (n)):

array_shift(array_values($array));

في O (1):

array_pop(array_reverse($array));

تم تحريره باقتراحات من التعليقات لحالات الاستخدام الأخرى الخ ...

إذا كان التعديل (بمعنى إعادة تعيين مؤشرات الصفيف) في $array ليس مشكلة ، فيمكنك استخدام:

reset($array);

يجب أن يكون هذا أكثر فعالية من الناحية النظرية ، إذا كانت هناك حاجة إلى "نسخة" مصفوفة:

array_shift(array_slice($array, 0, 1)); 

مع PHP 5.4+ (ولكن قد يتسبب خطأ في الفهرس إذا كان فارغًا):

array_values($array)[0];

ببساطة current($array) يمكن أن تحل


ببساطة قم بما يلي:

array_shift(array_slice($array,0,1));

تغيير بسيط لما نشره Sarfraz هو:

$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);

حافظ على هذه البساطة! الكثير من الإجابات الصحيحة هنا ، ولكن لتقليل كل الارتباك. هذين العمل وتقليل الكثير من النفقات العامة.

key($array) = يحصل على المفتاح الأول لصفيف
current($array) = يحصل على القيمة الأولى لصفيف


طريقة kludgy هي:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

كما أشار مايك (أسهل طريقة ممكنة):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); //echoes "apple"

إذا كنت ترغب في الحصول على المفتاح: (نفذ بعد إعادة التعيين)

echo key($arr); //echoes "4"

من وثائق PHP :

إعادة ضبط مختلطة (صفيف و $ صفيف

وصف:

reset () يقوم بإرجاع مؤشر الصفيف الداخلي إلى العنصر الأول وإرجاع قيمة عنصر الصفيف الأول أو FALSE إذا كان الصفيف فارغًا.


لا تعمل بعض المصفوفات مع وظائف مثل list أو reset أو current . ربما تكون صفائف "زائفة" - تنفذ بشكل جزئي ArrayIterator ، على سبيل المثال.

إذا كنت ترغب في سحب القيمة الأولى بغض النظر عن المصفوفة ، فيمكنك إجراء تضيق على وحدة التكرار:

foreach($array_with_unknown_keys as $value) break;

ستصبح القيمة المتاحة بعد ذلك في $value وستنقطع الحلقة بعد التكرار الأول. هذا أكثر فعالية من نسخ صفيف كبير المحتمل إلى دالة مثل array_unshift (array_values ​​($ arr)).

يمكنك انتزاع المفتاح بهذه الطريقة أيضًا:

foreach($array_with_unknown_keys as $key=>$value) break;

إذا كنت تتصل بهذا من خلال وظيفة ، فما عليك سوى الرجوع مبكرًا:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}

لقد تأخرت قليلاً في اللعبة ، لكن تم تقديم لي مشكلة حيث تضمنت مجموعة الصفيف عناصر صفيف كأطفال داخلها ، وبالتالي لم أستطع الحصول على تمثيل سلسلة لعنصر الصفيف الأول. باستخدام وظيفة current() لـ PHP ، تمكنت من:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

بفضل كل الحلول الحالية ساعدتني في الحصول على هذه الإجابة ، آمل أن يساعد هذا الشخص في وقت ما!


من مساعدي Laravel:

function head($array)
{
    return reset($array);
}

الصفيف الذي يتم تمريره بواسطة القيمة إلى الدالة ، يؤثر reset() على المؤشر الداخلي لنسخة الصفيف ، ولا يلمس الصفيف الأصلي. (لاحظ أنه يعرض false إذا كان الصفيف فارغًا)

مثال على الاستخدام:

$data = ['foo', 'bar', 'baz'];

current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz


أيضا ، هنا هو بديل. إنه أسرع بشكل طفيف ، ولكنه أكثر إثارة للاهتمام ، فهو يتيح تغيير القيمة الافتراضية بسهولة إذا كانت الصفيف فارغًا:

function head($array, $default = null)
{
    foreach ($array as $item) {
        return $item;
    }

    return $default;
}

هذه ليست استجابة بسيطة سو في العالم الحقيقي. Supost أن لدينا هذه الأمثلة من الردود المحتملة التي يمكنك العثور عليها في بعض المكتبات.

$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;

var_dump( 'reset1', reset($array1) );
var_dump( 'reset2', reset($array2) );
var_dump( 'reset3', reset($array3) );
var_dump( 'reset4', reset($array4) ); // warning

var_dump( 'array_shift1', array_shift($array1) );
var_dump( 'array_shift2', array_shift($array2) );
var_dump( 'array_shift3', array_shift($array3) );
var_dump( 'array_shift4', array_shift($array4) ); // warning

var_dump( 'each1', each($array1) );
var_dump( 'each2', each($array2) );
var_dump( 'each3', each($array3) );
var_dump( 'each4', each($array4) ); // warning

var_dump( 'array_values1', array_values($array1)[0] ); // Notice
var_dump( 'array_values2', array_values($array2)[0] );
var_dump( 'array_values3', array_values($array3)[0] );
var_dump( 'array_values4', array_values($array4)[0] ); // warning

var_dump( 'array_slice1', array_slice($array1, 0, 1) );
var_dump( 'array_slice2', array_slice($array2, 0, 1) );
var_dump( 'array_slice3', array_slice($array3, 0, 1) );
var_dump( 'array_slice4', array_slice($array4, 0, 1) );  // warning

list($elm) = $array1; //Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);

كما ترى ، لدينا العديد من حلول "الخط الواحد" التي تعمل بشكل جيد في بعض الحالات ، ولكن ليس على الإطلاق.

في رأيي ، يجب عليك أن معالج فقط مع المصفوفات.

نتحدث الآن عن الأداء ، على افتراض أن لدينا صفيف دائم ، مثل هذا:

$elm = empty($array)? null : ...($array);

...you would use without errors:
$array[count($array)-1] ;
array_shift
reset
array_values
array_slice

array_shift هو أكثر سرعة أن إعادة تعيين ، وهذا هو أكثر سرعة أن [count () - 1] وهذه الثلاثة هي أكثر سرعة أن array_values ​​و array_slice


معظم هذه العمل! ولكن لاستدعاء خط واحد سريع (منخفض الموارد):

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

انتاج:

apple

$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

هذا أكثر فعالية من array_values() لأن الدالة each() لا ينسخ الصفيف بأكمله.

لمزيد من المعلومات ، راجع http://www.php.net/manual/en/function.each.php


$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key

أتمنى أن يساعدك هذا. :)







arrays