foreach обращается к индексу или ассоциативному массиву
Вопрос
У меня есть следующий фрагмент кода.
$items['A'] = "Test";
$items['B'] = "Test";
$items['C'] = "Test";
$items['D'] = "Test";
$index = 0;
foreach($items as $key => $value)
{
echo "$index is a $key containing $value\n";
$index++;
}
Ожидаемый результат:
0 is a A containing Test
1 is a B containing Test
2 is a C containing Test
3 is a D containing Test
Есть ли способ не учитывать $index
переменная?
Решение
Ваша переменная $index там как бы вводит в заблуждение.Это число не является индексом, им являются ваши клавиши "A", "B", "C", "D".Вы все еще можете получить доступ к данным через пронумерованный индекс $index[1], но на самом деле дело не в этом.Если вы действительно хотите сохранить нумерованный индекс, я бы почти реструктурировал данные:
$items[] = array("A", "Test"); $items[] = array("B", "Test"); $items[] = array("C", "Test"); $items[] = array("D", "Test"); foreach($items as $key => $value) { echo $key.' is a '.$value[0].' containing '.$value[1]; }
Другие советы
Ты можешь это сделать:
$items[A] = "Test";
$items[B] = "Test";
$items[C] = "Test";
$items[D] = "Test";
for($i=0;$i<count($items);$i++)
{
list($key,$value) = each($items[$i]);
echo "$i $key contains $value";
}
Я не делал этого раньше, но теоретически это должно сработать.
Будьте осторожны с тем, как вы определяете свои ключи там.Хотя ваш пример работает, это может быть не всегда:
$myArr = array();
$myArr[A] = "a"; // "A" is assumed.
echo $myArr['A']; // "a" - this is expected.
define ('A', 'aye');
$myArr2 = array();
$myArr2[A] = "a"; // A is a constant
echo $myArr['A']; // error, no key.
print_r($myArr);
// Array
// (
// [aye] => a
// )
Не связан с StackOverflow