Якби у мене був масив на кшталт:
$array['foo'] = 400;
$array['bar'] = 'xyz';
І я хотів дістати перший елемент із цього масиву, не знаючи ключа для нього, як би це зробити? Чи є для цього функція?
Якби у мене був масив на кшталт:
$array['foo'] = 400;
$array['bar'] = 'xyz';
І я хотів дістати перший елемент із цього масиву, не знаючи ключа для нього, як би це зробити? Чи є для цього функція?
Відповіді:
reset() дає вам перше значення масиву, якщо у вас є елемент всередині масиву:
$value = reset($array);
Він також дає вам FALSEу випадку, якщо масив порожній.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
Якщо ви недостатньо знаєте масив (ви не впевнені, перший ключ є foo чи bar ), то масив також може бути порожнім .
Тож було б найкраще перевірити, особливо якщо є ймовірність, що повернене значення може бути логічним FALSE:
$value = empty($arr) ? $default : reset($arr);
Вищевказаний код використовує resetі так має побічні ефекти (він скидає внутрішній покажчик масиву), тому ви, можливо, віддасте перевагу використовувати array_sliceшвидкий доступ до копії першого елемента масиву:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
Припускаючи, що ви хочете отримати і ключ, і значення окремо , вам потрібно додати четвертий параметр до array_slice:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
Щоб отримати перший елемент у вигляді пари ( key => value):
$item = array_slice($arr, 0, 1, true);
Проста модифікація, щоб отримати останній елемент, ключ та значення окремо:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
Якщо масив насправді не великий, вам насправді не потрібен array_sliceі можна скоріше отримати копію всього масиву ключів, то отримайте перший елемент:
$key = count($arr) ? array_keys($arr)[0] : null;
Якщо у вас дуже великий масив, то для виклику потрібно array_keysбуде більше часу та пам'яті більше array_slice(обидві функції обходять масив, але останній припиняється, як тільки він зібрав необхідну кількість елементів - який один).
Помітним винятком є те, коли у вас є перша клавіша, яка вказує на дуже великий і звитий об'єкт. У цьому випадку array_sliceбуде дублювати цей перший великий об'єкт, тоді як array_keysлише захопить ключі.
PHP 7.3 реалізує array_key_first(), а також array_key_last(). Вони прямо надаються для ефективного доступу до першої та останньої клавіш без скидання внутрішнього стану масиву як побічного ефекту.
Таким чином , в PHP 7.3 перше значення з $arrayможуть бути доступні з
$array[array_key_first($array)];
Вам все-таки краще перевірити, чи масив не порожній, інакше ви отримаєте помилку:
$firstKey = array_key_first($array);
if (null === $firstKey) {
$value = "Array is empty"; // An error should be handled here
} else {
$value = $array[$firstKey];
}
Підроблений цикл, який розривається під час першої ітерації:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
Або використовувати each()( попередження: застаріло, як з PHP 7.2.0 ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
reset()Функція буде витягувати тільки перше значення.
Є кілька варіантів. array_shift()поверне перший елемент, але він також видалить перший елемент з масиву.
$first = array_shift($array);
current() поверне значення масиву, на який вказує його внутрішня пам'ять пам’яті, що є першим елементом за замовчуванням.
$first = current($array);
Якщо ви хочете переконатися, що він вказує на перший елемент, ви завжди можете використовувати reset().
reset($array);
$first = current($array);
reset()насправді повертає елемент, тож наступне, що з a $first = current($array)є зайвим.
Просто для того, щоб у нас були інші варіанти: reset($arr);досить добре, якщо ви не намагаєтесь утримувати покажчик масиву на місці, а при дуже великих масивах він вимагає мінімальної кількості накладних витрат. Однак, з цим є деякі проблеми:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
Спосіб зробити це без зміни вказівника:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
Користь $arr[reset(array_keys($arr))];полягає в тому, що вона викликає попередження, якщо масив справді порожній.
ще один простий і простий спосіб зробити це з використанням array_values
array_values($array)[0]
reset()є набагато кращим варіантом, оскільки він повертає значення false, якщо масив порожній. Ваше рішення не працюватиме, наприклад, у питанні
array_values($array)[0] ?? FALSE
Ми можемо зробити
$first = reset($array);
Замість
reset($array);
$first = current($array);
Як reset()
повертає перший елемент масиву після скидання;
Використовуйте функцію reset (), щоб отримати перший елемент із цього масиву, не знаючи ключа для нього.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
вихід // 400
Ви можете спробувати це.
Щоб отримати перше значення масиву: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
Щоб отримати перший ключ масиву
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
Ви можете використовувати array_shift
Я роблю це, щоб отримати перше і останнє значення. Це працює і з більшою кількістю значень.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
Починаючи з PHP 7.3.0, це можна зробити без скидання внутрішнього вказівника. Ви б використали array_key_first. Якщо ви впевнені, що ваш масив має значення у ньому, ви можете просто зробити:
$first = $array[array_key_first($array)];
Швидше за все, ви захочете обробити випадок, коли масив порожній:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
ви можете просто використовувати $array[0]. це завжди дасть вам перший предмет