Чи можливо знайти foreach
індекс?
в for
циклі наступним чином:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
дасть вам індекс.
Чи потрібно використовувати for
цикл чи є якийсь спосіб отримати індекс у foreach
циклі?
Чи можливо знайти foreach
індекс?
в for
циклі наступним чином:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
дасть вам індекс.
Чи потрібно використовувати for
цикл чи є якийсь спосіб отримати індекс у foreach
циклі?
Відповіді:
foreach($array as $key=>$value) {
// do stuff
}
$key
- індекс кожного $array
елемента
$myarr['foo'] = 'bar';
цей метод не вдається
vatiable++;
кожною ітерацією. Традиційний спосіб, але завжди працював.
Ви можете помістити хак у своє foreach
, наприклад, поле, посилене на кожному пробігу, саме це for
дає цикл у масиві з індексованим числом. Таке поле буде псевдоіндексом, який потребує керування вручну (прирости тощо).
A foreach
дасть вам свій індекс у вигляді вашої $key
вартості, тому такий злом не повинен бути необхідним.
наприклад, в а foreach
$index = 0;
foreach($data as $key=>$val) {
// Use $key as an index, or...
// ... manage the index this way..
echo "Index is $index\n";
$index++;
}
Слід зазначити, що ви можете зателефонувати key()
на будь-який масив, щоб знайти поточний ключ його включеним. Як ви можете здогадатися current()
, поверне поточне значення і next()
перемістить вказівник масиву на наступний елемент.
$key
від $key=>$value
) ... Однак, я вважаю, що нижча продуктивність не є значною / сприймається в простому циклі.
Ви можете створювати $i
зовнішнє цикл і робити $i++
внизу циклу.
Ці дві петлі рівноцінні (смуга запобіжних поручнів звичайно):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
напр
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
Я думаю, що найкращий варіант такий же:
foreach ($lists as $key=>$value) {
echo $key+1;
}
це легко і нормально
Джонатан прав. Масиви PHP виконують функцію відображення таблиці таблиць з картою на значення. в деяких випадках ви можете отримати індекс, якщо ваш масив визначений, наприклад
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
ваш вихід буде
2
5
у такому випадку кожен елемент масиву має індекс, який відомо, але якщо ви зробите щось подібне до цього
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
Ви не отримуєте жодного результату. Це відбувається тому, що масиви в PHP не є лінійними структурами, як вони є у більшості мов. Вони більше схожі на хеш-таблиці, які можуть мати або не мати ключів для всіх збережених значень. Отже, foreach не використовує індекси для повзання по них, тому що вони мають індекс лише у випадку, якщо масив визначений. Якщо вам потрібно мати індекс, переконайтеся, що ваші масиви повністю визначені, перш ніж переходити через них, і використовуйте для циклу.
$var[] = 10;
(див. Посилання PHP для керівництва), тому другий for
цикл видає очікувані результати.
Я зазвичай роблю це під час роботи з асоціативними масивами:
foreach ($assoc_array as $key => $value) {
//do something
}
Це буде добре працювати і з неасоціативними масивами. $ key буде значенням індексу. Якщо ви віддаєте перевагу, ви можете зробити це також:
foreach ($array as $indx => $value) {
//do something
}
Я хотів би додати це, я використовував це в laravel, щоб просто індексувати свою таблицю:
Мій код:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
Змінна не може бути використана , так як просили загального PHP.
Я вирішив такий спосіб, коли мені довелося використовувати індекс і значення foreach у тому ж контексті:
$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {
echo $letter; //Here $letter content is the actual index
echo $array[$letter]; // echoes the array value
}//foreach
foreach(array_keys($array) as $key) {
// do stuff
}