За последние 24 часа нас посетили 19163 программиста и 1641 робот. Сейчас ищут 988 программистов ...

Ассоциативный массив

Тема в разделе "PHP для новичков", создана пользователем An555, 27 июн 2024.

  1. An555

    An555 Новичок

    С нами с:
    27 июн 2024
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте.

    У меня возникла проблема при работе с ассоциативным массивом.
    Я хочу вывести название ключей, но скрипт, который я написал выводит лишь порядковый номер ключей.
    Я не знаю, как мне получить название ключей в ассоциативном массиве.

    Вот код:

    <?php
    $mas = array();
    $f = file('online.txt'); /* Тут люди */

    foreach($f as $line) {
    $nickname = trim(substr($line, 18));
    $mas[] = [$nickname => '0']; /* Заполняю массив */
    };

    $keys = array_keys($mas);
    foreach ($keys as $key) {
    print_r($mas[$key]); /* Выводит всё правильно: Array ( [Ufo1] => 0 ) Array ( [Ufo2] => 0 ) Array ( [Ufo3] => 0 ) */
    };

    /* А этот кусочек кода выводит почему-то порядковый номер ключей вместо названий ключей. */
    $keys = array_keys($mas);
    foreach ($keys as $key) {
    echo($key.' '); /* Выводит: 0 1 2 3 4 */
    };
    ?>

    Если не трудно, подскажите, где я ошибся.
     
    #1 An555, 27 июн 2024
    Последнее редактирование: 27 июн 2024
  2. rr33rr

    rr33rr Активный пользователь

    С нами с:
    6 май 2021
    Сообщения:
    35
    Симпатии:
    18
    Ваш "кусочек кода" выводит, как ему и положено, ключи массива массивов, который вы создали первым циклом:
    Код (Text):
    1. [
    2.   0 => ['Ufo1' => '0'],
    3.   1 => ['Ufo2' => '0'],
    4.   2 => ['Ufo3' => '0'],
    5.   3 => ['Ufo4' => '0'],
    6.   4 => ['Ufo5' => '0'],
    7. ];
    Чтобы работало так, как вам хочется, нужно создавать НЕвложенный массив.
    Примерно так:
    PHP:
    1. <?php
    2. $mas = [];
    3. $f = file('online.txt'); /* Тут люди */
    4. foreach ($f as $line) {
    5.   $nickname = trim(substr($line, 18));
    6.   $mas[$nickname] = '0';
    7. }
    8.  
    9. echo "<pre>";
    10. print_r ($mas);
    11. /* Выведет
    12. Array
    13. (
    14.     [Ufo1] => 0
    15.     [Ufo2] => 0
    16.     [Ufo3] => 0
    17.     [Ufo4] => 0
    18. )
    19. */
    20.  
    21. $keys = array_keys($mas);
    22. /*
    23. foreach ($keys as $key) {
    24.   echo $key, ' ';
    25. }
    26. или проще:
    27. */
    28. echo implode(' ', $keys);
    29. /* Выведет
    30. Ufo1 Ufo2 Ufo3 Ufo4
    31. */
     
    #2 rr33rr, 1 июл 2024
    Последнее редактирование: 1 июл 2024
  3. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    95
    Адрес:
    Бавария, Германия
    или проще:
    PHP:
    1. <?
    2. $mas = [];
    3. $f = file('online.txt'); /* Тут люди */
    4. foreach ($f as $line)
    5.   $mas[] = trim(mb_substr($line, 18));
    6.  
    7. echo implode(' ', $mas);
    8. /* Выведет
    9. Ufo1 Ufo2 Ufo3 Ufo4
    10. */
     
  4. rr33rr

    rr33rr Активный пользователь

    С нами с:
    6 май 2021
    Сообщения:
    35
    Симпатии:
    18
    Судя по тексту поста и коду, автору таки нужен ассоциативный массив
    ['Ufo1' => '0', 'Ufo2' => '0', 'Ufo3' => '0', 'Ufo4' => '0']
    а не простой ['Ufo1', 'Ufo2', 'Ufo3', 'Ufo4'].

    Но это не точно. )
     
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    95
    Адрес:
    Бавария, Германия
    Думаю, что автору нужен конечный результат - массив ключей,
    а не получение для этого ассоциативного массива с 0 значениями...
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Он же написал, что ему нужны $key => '0', просто сам не понял, что назвал правильным массив массивов, а в реале похоже нужен обычный ассоциативный.
    --- Добавлено ---
    Короче в цикле не $mas[] = [$nickname => '0']; а $mas[$nickname] = '0';
    --- Добавлено ---
    Чем заменить '0', он найдет ;)