внутренний счетчик массива

181
22 декабря 2017, 02:52

Существует ли какой-то способ сбросить внутренний счетчик массива? (ну или как оно называется, не знаю)

Пример:

$a = [
    2 => 2,
    3 => 3,
];
unset($a[3]);
$a[] = 4;
var_dump($a);

результатом будет:

array(1) {
  [2] => int(2),
  [4] => int(4)
}

Что, не то чтобы мешает, но да, а еще дико бесит.

Есть ли какой-то способ, не пересоздавая массив, сбросить в нём эту самую штуку, чтобы после

kakaya_to_mahinaciya($a)
$a[] = 4;

получить:

array(1) {
  [2] => int(2),
  [3] => int(4)
}
Answer 1

вы в своем вопросе фактически привели пример из документации по массивам, иллюстрирующем как они работают в принципе.

Как уже говорилось выше, если ключ не был указан, то будет взят максимальный из существующих целочисленных (integer) индексов, и новым ключом будет это максимальное значение (в крайнем случае 0) плюс 1. Если целочисленных индексов еще нет, то ключом будет 0 (ноль).

Учтите, что максимальное целое значение ключа не обязательно существует в массиве в данный момент. Оно могло просто существовать в массиве какое-то время, с тех пор как он был переиндексирован в последний раз. Следующий пример это иллюстрирует:

и тут можно привести ваш пример кода.

там же явным текстом написано, что для переиндексации использовать array_values. Так что в целом ответ на ваш вопрос - "никак, так устроен пхп".

Единственное замечание, что array_values сбросит ассоциативные ключи, поэтому в случае смешанных массивов можно использовать array_merge с единственным аргументом - самим массивом. Это оставит строковые ключи и перенумерует целочисленные.

В результирующем массиве значения исходного массива с числовыми ключами будут перенумерованы в возрастающем порядке, начиная с нуля.

Answer 2

Попробуй воспользоваться функцией foreach(), она разбивает его на ключ и значение , тем самым перебирая массив.Вот пример:

`

 <?php
     $arr=array('1' => 'a','2' => 'b');
     foreach($arr as $key => $val){
     echo "[$key] =>".$val.'<br>';
     }
     ?>

`

READ ALSO
SoftDeletes и полиморфная связь в Laravel

SoftDeletes и полиморфная связь в Laravel

Существует сущность Activity, и она связана с другими полиморфной связьюВ сущности Acitivity включено мягкое удаление, и существует поле 'deleted_at'

190
PHP mail() Не приходят письма на почту

PHP mail() Не приходят письма на почту

Сайт сделан на wp, не приходили клиенту письма при заказеСоздал тестовый файл /send

268
Не работает конструктор в yii2

Не работает конструктор в yii2

Добрый день! Есть стандартный класс для авторизации UserВ нём мне надо сделать так, чтобы данные о пользователях брались из баз данных

190
трёхуровневое меню

трёхуровневое меню

Надо у подкатегории вывести подкатегорию

154