2016-03-31 9 views
0

Извините, если это дублированный вопрос, я не знаком с точной терминологией для того, что я пытаюсь достичь, поэтому я не смог найти ответ на данный момент. Я довольно зеленый с этим материалом, и следующее произошло через пробную версию и ошибку - не потому, что я под любыми иллюзиями, что это правильно.Поиск по всем уровням массива PHP

Вот что я пытаюсь достичь:

  1. Используя текстовое поле, клиенты ввести пользовательские время открытия (по одному в строке): день (имя), дата, состояние (открытый или закрытый), время открытия , время закрытия. Например: «Рождество, 2016-12-25, закрыто» или «День подарков», 2016-12-26, открыт, 8: 00,17: 00 '.
  2. Это содержимое textarea разбивается на массив по новой строке, а затем снова делится запятой.
  3. Используя эти массивы, найдите, является ли дата сегодняшней датой, и если это так, отобразите больше контента из массивов (например, время открытия для этого конкретного дня) или - если нет совпадения - отобразите обычные часы работы (уже в другом месте).

То, что я получил до сих пор (обратите внимание, что я уже забрал $ custom_dates переменного содержания):

$array = array(); 
$array = preg_split('/\R/', $custom_dates); /* split by line break */ 
foreach($array as $key => $custom_dates) { 
    $array[$key] = explode(',', $custom_dates); /* split again by comma */ 
}; 

Это возвращает следующий массив (который также может быть длиннее или короче, в зависимости от потребности клиента):

Array 
(
    [0] => Array 
     (
     [0] => Christmas Day 
     [1] => 2016-12-25 
     [2] => closed 
    ) 

    [1] => Array 
    (
     [0] => Boxing Day 
     [1] => 2016-12-26 
     [2] => open 
     [3] => 8:00 
     [4] => 17:00 
    ) 
) 

Что я борюсь с как искать конкретный матч даты во всех массивах. Если я использую if ($ array [$ key] [1] == $ date) (где $ date уже настроена на сегодняшнюю дату на основе моего часового пояса), то он ищет только последний массив, который в этом случае День подарков информации. Так что если $ date - 2016-12-26, тогда все будет здорово, и это будет продолжаться и показать время открытия бокса.

Но если сегодняшняя $ date - 2016-12-25, то - даже если есть информация, относящаяся к этой дате - ничего не происходит, потому что ключ $ в моей инструкции if проверяет только информацию о боковых днях. Это означает, что продолжать проверять остальное (открытое или закрытое и т. Д.) Является излишним, поскольку оно даже не дает правильной даты.

Мой вопрос (вопрос): что я могу использовать вместо $ array [$ key] [1], чтобы искать все уровни массива, чтобы найти соответствие для последнего [1]? Или я пришел к нему с совершенно неправильного угла?

Пожалуйста, помогите мне, если можете, я вытаскиваю свои волосы, потому что я не знаю правильных условий для поиска. С удовольствием предоставляем более подробную информацию, если вам это нужно.

Заранее спасибо.

+0

попробуйте использовать цикл 'for' или' foreach' – Nehal

+0

@tms, если ответ сработал для вас, примите его. Если нет, добавьте комментарий о том, что еще может быть фактором или соображением. – paulski

ответ

1

Вы бы выполнили это внутри цикла foreach, который вы уже создали.

$array = preg_split('/\R/', $custom_dates); /* split by line break */ 
foreach ($array as $key => $custom_date_string) { 
    $custom_date = explode(',', $custom_date_string); 
    if ($custom_date[1] === $today) { 
     // do stuff 
    } 
    $array[$key] = $custom_date; // if you still need this 
} 
+0

Я предполагаю, что этот '$ custom_date = explode (',', $ custom_date_string);' должен появиться перед foreach – Nehal

+0

@ Ms.Nehal - я не понимаю ваш комментарий. У вас даже не было бы доступа к переменной $ custom_date_string вне области цикла foreach. Можете ли вы уточнить? – paulski

+0

Спасибо @pdom - это действительно помогло мне в правильном направлении, и все работает так, как мне нужно. Если у вас есть время, я бы очень признателен, если бы вы могли дать краткое объяснение вашего решения, поэтому я могу понять, почему ваш взрыв поступил по-другому с моим (кроме очевидных различий в внешности)? Еще раз спасибо. :) – tms

Смежные вопросы