foreach доступ к индексу или ассоциативному массиву - PullRequest
4 голосов
/ 16 сентября 2008

У меня есть следующий фрагмент кода.

$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?

Ответы [ 3 ]

14 голосов
/ 16 сентября 2008

Ваша переменная $ 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];
}
4 голосов
/ 16 сентября 2008

Вы можете сделать это:

$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";
}

Я раньше этого не делал, но теоретически это должно сработать.

1 голос
/ 16 сентября 2008

Будьте осторожны, как вы определяете свои ключи там. Хотя ваш пример работает, он может не всегда:

$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
// )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...