PHP: не может использовать простой массив связей - PullRequest
2 голосов
/ 18 октября 2010

Я написал код для анализа чего-либо, динамически создавая массив из ключей массива одного массива.Это из формы, поэтому нечетный ключ имеет значение, и это как-то проблема.

Мой код:

//array values are not needed in my code, just junk rather
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

foreach($array as $element) {
    $parts = explode("_", $element);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

Я не понимаю, как это может пойти не так, нокогда foreach() проходит через ассоциативный массив, он читает «2» и «12» как отдельные ключи массива!Это разрушает мой $explode код и выдает ошибку, так как «2» не содержит _.

Почему ассоциативный массив терпит неудачу, как это?Я попытался явно определить as $element => $value, НЕ используя $ value (чтобы попытаться игнорировать его), но он выдает еще больше ошибок.

1 Ответ

5 голосов
/ 18 октября 2010

Проблема не в том, что 2 и 12 рассматриваются как ключи, а в том, что они рассматриваются как реальные значения.Если вы наберете print_r($array), вы увидите:

Array
(
    [one_a] => 2
    [0] => three_b
    [1] => four_c
    [five_d] => 12
)

(three_b и four_c назначается автоматический ключ инкрементного массива). Поэтому вы должны принять во внимание, что ключ можетчисловой:

<?php
$array = array('one_a'=>2, 'three_b', 'four_c', 'five_d'=>12);

$number = array();
$letter = array();

// get the key separate from the element:
foreach($array as $key => $element) {
    // and now check for the key
    if (is_numeric($key))
        $value = $element;
    else
        $value = $key;

    $parts = explode("_", $value);
    $number[] = $parts[0];
    $letter[] = $parts[1];
}

print_r($number);

Это даст вам

Array
(
    [0] => one
    [1] => three
    [2] => four
    [3] => five
)
...