За последние 24 часа нас посетил 52731 программист и 1768 роботов. Сейчас ищут 1070 программистов ...

Из таблицы - в массив, как оптимально сделать?

Тема в разделе "PHP для новичков", создана пользователем superlamer, 3 май 2017.

  1. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Здравствуйте, прошу совета. Имеет место быть таблица, сделанная руками пользователя, пользователь находит значение нужной ячейки, оперируя двумя значениями двух осей координат: вертикальной и горизонтальной. Иными словами, конь на e2, ферзь d4, etc. Возникла необходимость сделать на основе таблицы php-скрипт: массив, содержащий данные таблицы , и плюс парочку циклов, предназначенных перебирать элементы массива, в зависимости от вводимых опций поиска. Подскажите, как оптимально реализовать задачу? Первое, что пришло в голову - массив, разбитый на равные части array_chunk, второе - ассоциативный массив со сложными индексами... теряюсь среди возможностей. Как наиболее правильно и оптимально подойти к решению? Надеюсь, сформулировал более-менее внятно, данные из таблицы буду перегонять в массив сугубо руками, здесь нет вопроса из разряда "из екселя - в массив".
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    задачу подробнее опиши
    что за данные
    почему теряешься в массивах
     
  3. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Данные таблицы - обычные стринги. Горизонтальная ось - значения, вертикальная - временные промежутки. Все просто. Задача - получить в переменную значение единственной ячейки (элемента массива), находящейся на пересечении двух координат.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну и в чем проблема-то?
    выбрал нужную строку, взял нужный элемент массива.
    В чем сложность? Это ж простейшая операция.

    Не понятно с чем именно ты испытываешь трудности.
     
  5. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Представь шахматную доску, на которой нет свободных клеток: вся установлена фигурами. Я хочу узнать, какая фигура находится на клетке с5, и вижу, что это слон. Ок. Теперь я делаю массив из 64 элементов, и объявляю две переменные - $h = 'c'; $w = '5'; вопрос в том, как оптимально организовать массив под эту задачу, чтобы в третьей переменной получать на выходе "слона", основываясь на первых двух?. Также следующее условие: совсем не хочется присваивать каждому элементу массива уникальный индекс (с5, h8, g3), т.к. элементов массива здесь не 64, а несколько сотен, и все это пришлось бы делать руками. Неужели и сейчас непонятно объяснил?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    PHP:
    1. $cells[$h][$w]
    это называется двумерный массив. как пример - таблица.
    --- Добавлено ---
    ты объяснил понятно ещё в первом сообщении
    не понятно с чем конкретно у тебя сложность
     
  7. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Вот с этим:

    PHP:
    1. <?php
    2.   $arr = array( array(‘Вася’, ‘слесарь’, 2500 ),
    3.             array(‘Миша’,’строитель’, 3000),
    4.             array(‘Андрей’, ‘шофер’, 2700));
    5.  
    6.  
    7. for ($i = 0; $i < 3; $i++)
    8.   {
    9.     for ($j=0; $j <3; $j++)
    10.     {
    11.        echo $arr[$i][$j];
    12.     }
    13.   }
    14.  
    15. ?>
    как получить

    PHP:
    1. $cells[$h][$w]
    из этого массива ?

    предположим, пересечение второй строчки со вторым столбцом, т. е. $h = '2'; $w = '2'; ?
    Я правда не понимаю.
     
  8. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    понял, спс ))
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
  10. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Сорь, еще вопрос... без проблем получаю значение "ячейки" в двухмерном массиве по двум индексам. Но ведь $h и $w это не индексы, это изначально метки двух осей координат - вертикальной и горизонтальной. Как привязать их к индексам? - чтобы можно было обратиться к элементу массива таким образом: $cells[$h][$w] ? необходимо сделать ассоциативный массив?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если хочешь, чтобы ключем в массиве были слова - то да, будет ассоциативный массив. Если ты берёшь из бд, то там будут номерки или слова или слова с номерками - всё это в массив загоняй.

    У тебя сложность, как при взаимодействии с пользователем установить куда он тыкнул? Надо в ячейку сохранять обе координаты как-то. А javascript поможет их выудить и сделать ajax-запрос =)
     
  12. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Написал обработчик, когда передаю ему данные через GET, попросту подставляя в адресной строке значения, позволяющие доставать из "клеток" двухмерного массива их содержание - все работает безукоризненно. Но когда те же самые данные в тот же самый обработчик отдаю аяксом из js (через GET или POST, все равно), скрипт сходит с ума: по первому столбцу находит значения, по остальным нет. Или как-то еще, не могу понять и уложить в систему. В чем разница-то? одни и те же ведь данные.... подскажи где копать.

    Вот так передаю данные из js:

    Код (Javascript):
    1. <script>
    2. function dosubmit( ) {
    3.   new Ajax.Updater( 'result', 'add.php', { method: 'post',
    4.     parameters: $('myform').serialize() } );
    5.   $('myform').reset();
    6. }
    7. </script>
    Да, и к к формочке подключен prototype.js.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это тебе пора осваивать дебаг. Хрен знает почему он глючит, если вручную работает. Даже если я тебе подскажу, то в следующий раз опять придётся подсказывать.

    что я предлагаю. Т.к. ты знаешь, что алгоритм работает, что ты правильно почти всё понял, но где-то что-то упустил, то я расскажу, как искать, а ты постарайся найти где грабли.

    var_dump() как сиюминутное решение, xdebug как правильное

    вперед. Пиши как че.
     
  14. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    уф, попросту одну букву перепутал в названии филда, чайник. )) Пашет.