Есть ли простой способ найти индекс вновь созданного элемента массива, используя скобку в PHP? - PullRequest
0 голосов
/ 17 июня 2020

Я работаю со сценарием, в котором я выполняю итерацию по массиву и присваиваю значения в этом массиве другому массиву. Мне нужен индекс вновь созданного элемента массива, чтобы я мог дальше управлять им. Когда вы создаете новый элемент в массиве с помощью метода $array[] =, существует ли простой способ определить, какой индекс был назначен без цикла по массиву и оценки или использования array_search?

Current Код

foreach($array1 as $item) {
   $array2[] = $item['some_index'];
}

Единственное решение, которое я нашел до сих пор, но кажется неуклюжим

foreach($array1 as $item) {
   $array2[] = $item['some_index']; //has a value of 'value1'
   $key = array_search('value1',$array2)
}

Ответы [ 3 ]

3 голосов
/ 17 июня 2020

Вставка значений таким образом не изменяет указатель массива, но вы всегда можете заставить его самостоятельно с помощью end () , чтобы вы могли использовать key () (и, кстати, current () ):

foreach ($array1 as $item) {
   $array2[] = $item;
   end($array2);
   echo "$item inserted as ", key($array2), PHP_EOL;
}

Demo

1 голос
/ 17 июня 2020

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

<?php
foreach($array1 as $item) {
           // pushes value onto array
           // subtracts 1 from the returned count to calculate the new index
    $key = (array_push($array2, $item['some_index']) - 1);
}

0 голосов
/ 17 июня 2020

Поскольку ваш массив - numeri c, вы можете сделать это так:

foreach($array1 as $item) {
   $array2[] = $item['some_index']; //has a value of 'value1'
   $key = count($array2) -1;
}

Или вы также можете просто добавить переменную $ counter, например (если $ array2 пусто):

 $counter = 0;  
 foreach($array1 as $item) {
   $array2[] = $item['some_index']; //has a value of 'value1'
   $key = $counter;
   $counter++;
}

РЕДАКТИРОВАТЬ: Как упоминалось в AbraCadaver, если ваш массив не может начинаться с 0, вы должны использовать end () и key () - функцию, чтобы получить ключ в последней позиции:

foreach($array1 as $item) {
   $array2[] = $item['some_index']; 
   end($array2);
   $key = key($array2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...