#php
#php
Вопрос:
У меня есть цикл foreach в php для итерации ассоциативного массива. В цикле вместо увеличения переменной я хочу получить числовой индекс текущего элемента. Возможно ли это.
$arr = array('name'=>'My name','creditcard'=>'234343435355','ssn'=>1450);
foreach($arr as $person){
// want index here
}
Обычно я делаю это, чтобы получить индекс:
$arr = array('name'=>'My name','creditcard'=>'234343435355','ssn'=>1450);
$counter =0;
foreach($arr as $person){
// do a stuff
$counter ;
}
Комментарии:
1. Для чего нужен числовой индекс для ассоциативного массива?
Ответ №1:
Используйте этот синтаксис foreach
для доступа к ключу (как $index
) и значению (как $person
)
foreach ($arr as $index => $person) {
echo "$index = $person";
}
Это объясняется в документации PHP foreach
.
Ответ №2:
Зачем вам числовой индекс внутри ассоциативного массива? Ассоциативный массив сопоставляет произвольные значения с произвольными значениями, как в вашем примере, строки со строками и числами:
$assoc = [
'name'=>'My name',
'creditcard'=>'234343435355',
'ssn'=>1450
];
Числовые массивы отображают последовательные числа в произвольные значения. В вашем примере, если мы удалим все строковые ключи, нумерация будет такой:
$numb = [
0=>'My name',
1=>'234343435355',
2=>1450
];
В PHP вам не нужно указывать ключи в этом случае, он генерирует их сам.
Теперь, чтобы получить ключи в foreach
инструкции, вы используете следующую форму, как уже показал вам @MichaelBerkowski:
foreach ($arr as $index => $value)
Если вы выполните итерацию по нумерованному массиву, $index
у него будут числовые значения. Если вы выполните итерацию по массиву assoc, он будет иметь значения указанных вами ключей.
Серьезно, почему я вообще все это описываю ?! Это общеизвестно прямо из руководства!
Теперь, если у вас есть ассоциативный массив с некоторыми произвольными ключами, и вы должны знать нумерованную позицию значений, и вас не волнуют ключи, вы можете выполнить итерацию по результату array_values
в вашем массиве:
foreach (array_values($assoc) as $value) // etc
Но если вы заботитесь о ключах, вам нужно использовать дополнительный счетчик, как вы показали сами:
$counter = 0;
foreach ($assoc as $key => $value)
{
// do stuff with $key and $value
$counter;
}
Или какой-то прикрученный материал в функциональном стиле array_reduce
, не имеет значения.
Комментарии:
1. lol спасибо @hijarian. Это, как спрашивали 5 лет назад. Теперь я написал книги по PHP
2. @MarthaJames бвахаха, некропостинг! 🙂