2016-03-31 25 views
0

Bu yinelenen bir soru ise özür dilerim, ulaşmaya çalıştığım şeyin tam terminolojisine aşina değilim, bu nedenle şu ana kadar bir yanıt aramakta başarısız oldum. Ben bu şeylerle oldukça yeşilim ve aşağıdakiler deneme ve yanılma yoluyla ortaya çıktı - çünkü doğru olan herhangi bir yanılsama altında olduğum için değil.Bir PHP dizisinin tüm düzeylerinde arama yapın

  1. bir textarea kullanarak, müşteriler özel kere (her satıra bir tane) açılış girin: gün (isim), tarih, durumu (açık veya kapalı), açılış saati İşte

    elde etmek çalıştığım şey , kapanış saati. Örneğin: 'Noel Günü, 2016-12-25, kapalı' veya 'Boks Günü, 2016-12-26, açık, 8: 00,17: 00'.
  2. Bu textarea içeriği, bir diziye yeni satır ile bölünür ve sonra virgülle tekrar ayrılır.
  3. Bu dizileri kullanarak, tarihin bugünün tarihini olup olmadığını, varsa, dizilerden daha fazla içerik gösterip göstermediğini (belirli bir günün açılış saati gibi) veya - eşleşme yoksa - normal çalışma saatlerini (zaten) görüntüler. başka yerde ayarla).

şimdiye kadar var ne (not Zaten alınan ettik $ değişken içerik 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 */ 
}; 

Bu aynı zamanda daha uzun veya daha kısa bağlı olabilir ki (şu diziyi döndürür müşterinin ihtiyaçlar):

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 
    ) 
) 

birlikte mücadele ediyorum ne dizileri her belirli bir tarih maçı aramak için nasıl. Eğer kullanırsam ($ dizi [$ key] [1] == $ tarih) (burada $ date bugün benim saat dilimine göre bugünkü tarih olarak ayarlanmışsa), sadece bu durumda son diziyi arar. Boks Günü bilgisi. Öyleyse eğer $ date 2016-12-26 ise, o zaman her şey harika ve devam edecek ve Boxing Day açılış saatlerini gösterecektir.

Ancak, eğer bugünün tarihi $ 2016-12-25 ise - bu tarihe özgü bilgiler olsa da - if ifademdeki $ tuşunun yalnızca Boxing Day dizisi bilgisini kontrol etmesi nedeniyle hiçbir şey olmuyor. Bu, geri kalanını (açık veya kapalı, vb.) Kontrol etmeye devam etmenin, tarihin doğru bir şekilde alınamaması nedeniyle gereksiz olduğu anlamına gelir.

Benim (uzun soluklu) sorumuz: son [1] için bir eşleşme bulmak için tüm dizi düzeylerini aramak amacıyla $ dizi [$ key] [1] yerine ne kullanabilirim? Ya da tamamen yanlış açıdan ona geldim mi?

Lütfen bana yardım edin, eğer saçlarımı çekiyorum çünkü aradığım doğru terimleri bilmiyorum. İhtiyacınız olursa daha fazla bilgi vermekten mutluluk duyarız.

Önceden teşekkür ederiz.

+0

deneyin – Nehal

+0

@tms, bunu kabul edin. Aksi halde, bir faktör veya başka bir faktör olabileceği hakkında yorum ekleyiniz – paulski

cevap

1

Bunu zaten oluşturduğunuz foreach döngüsünün içinde gerçekleştirirsiniz. Cevap sizin için çalışıp çalışmadığını `for` veya` foreach` döngü kullanılarak

$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

Sanırım bu $ $ custom_date = patlayabilir (',', $ custom_date_string); 'foreach'den önce gelmelidir – Nehal

+0

@ Ms.Nehal - Anlamıyorum senin yorumun. Foreach döngüsünün kapsamı dışındaki $ custom_date_string değişkenine bile erişemezdiniz. Detaylandırır mısın? – paulski

+0

Teşekkürler @pdom - bu gerçekten beni doğru yöne yönlendirdi ve her şey gerektiği gibi çalışıyor. Eğer zamanınız varsa, çözümünüzle ilgili kısa bir açıklama yapabilmeniz için gerçekten çok minnettarım, bu yüzden patlamanızın neden farklı şekilde davrandığını anlayabiliyorum (görünüşteki bariz farklılıklardan başka)? Tekrar teşekkürler. :) – tms

İlgili konular