Это столь же легко как звуки заголовка; я должен получить индекс/ключ последнего вставленного объекта. Почему это трудно? См. следующие два примера кода:
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Записи:
res=aaa - 0
res=bbb - 1
res=aaa - 2
Array (
[0] => aaa
[1] => bbb
[2] => aaa
)
Несомненно, это, кажется, хорошо работает, но видит это:
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[2]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Записи:
res=aaa - 0
res=bbb - 1 <- wrong!
res=aaa - 2 <- wrong!
Array (
[0] => aaa
[2] => bbb <- real key
[3] => aaa <- real key
)
Таким образом короче говоря, популярное обходное решение count($array)-1
испорчен.
Если вы работаете только с числовыми индексами для своего массива, последний автоматически сгенерированный индекс всегда будет самым большим ключом массива.
Итак, для автоматически сгенерированных индексов использование чего-то вроде max (array_keys ($ a))
должно работать.
Например, это:
$a=array();
echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>';
echo 'res='.($a[2]='bbb').' - '.(max(array_keys($a))).'<br>';
echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
Вы получите:
res=aaa - 0
res=bbb - 2
res=aaa - 3
Array
(
[0] => aaa
[2] => bbb
[3] => aaa
)
Но учтите, что это не сработает в ситуациях, когда вы указываете индекс ...
Вы можете использовать функцию end () , чтобы получить последний элемент в массиве, и array_keys () , чтобы вернуть массив массива. -ключи. Сбивает с толку. На практике это работает следующим образом:
$key = end(array_keys($array));
Благодарность в комментариях остается за вами.
Вы можете использовать ключ ($ a) вместе с end ($ a)
$a=array();
$a[]='aaa'; foo($a);
$a[3]='bbb'; foo($a);
$a['foo']='ccc'; foo($a);
$a[]='ddd'; foo($a);
function foo(array $a) {
end($a);
echo 'count: ', count($a), ' last key: ', key($a), "\n";
}
печатает
count: 1 last key: 0
count: 2 last key: 3
count: 3 last key: foo
count: 4 last key: 4
Ба, похоже, я сам нашел ответ:
$last_id = array_pop(array_keys($a));