Array "Tuşlar" kullanarak

6 Cevap php

Bir Posta Kodu aralık arama tarafından oluşturulan bir veri seti var:

$zips:

key -> value
11967 -> 0.5
11951 -> 1.3

Anahtar Posta Kodu (ben Veritabanı sorgulamak gerekir Hangi) ve değer kullanıcının girdiği posta kodu km uzaklıktadır. Ben anahtarı (Posta Kodu) almak ve veritabanı aramak gerekir, preferably benim şimdiki benzer bir MySQL sorgusu kullanarak:

$getlistings = mysql_query("SELECT * FROM stores WHERE zip IN ($zips)");

Diğer alternatif kodumu nasılsa dizi değiştirmektir. Ben dizi başlangıçta oluşturulan olduğu için kod arıyorum çalıştım ama bulamadım. Herhangi bir yardım büyük mutluluk duyacağız! Teşekkürler :)

6 Cevap

Bir SQL-uyumlu bir dize dizisi anahtarlarını dönüştürmek olabilir. Örneğin:

'11967', '11951'

ve daha sonra sorguda dize kullanabilirsiniz.

SQL sorgusu bir php dizi ne olduğunu bilmiyor ve sadece orada tuşları ayıklamak ve tırnak onları çevreleyen için iyi bir yol (ben biliyorum), bu yüzden bu senin en iyi bahis olabilir beri.

EDIT: Ionut G. Stan yazdı (ve bir örnek verdi) çöktüğünü kullanarak ve * array_map * fonksiyonlar orada alırsınız, gibi. Sütun tanım sayısal Ancak, eğer ben believe sağlanan çözümü sadece çalışacaktır. Karakter sütun elemanları IN yan tümcesinde kesme çevrili olması gerektirir.

Diğer cevaplar, yani benim tarafımdan bir ek açıklama yorum yapamam. Ülkeye bağlı olarak vardır ve bunları karşılaştırmak istiyorsanız size sayısal değer olarak saklamak yok ya emin olun bu yüzden ne verilerle yapmak ... Almanya'da "0" ile başlayan ZIP Kodları vardır diğer veriler (örneğin ZIP <-> geocoord eşleştirmeleri) veya her yerde int ve çıkışında filtreleme kullanmak için onları dönüştürmek emin olun.

Eski Posta kodları dört numaraları, yenileri beş var vardı. Yani lider 0 eksik olduğundan dört sayı ile yeni bir ZIP görüntüleniyor karışıklığa yol açacaktır.

Geçici bir tablo kullanımına ilişkin i tablonun büyüklüğü ve kaç zip kodları sorguda kullanılan bağlıdır söyleyebilirim.

Bu yapmak gerekir:

// array_map sanitizes the data
$zip_codes = implode(', ', array_map('intval', array_keys($zips)));
$getlistings = mysql_query("SELECT * FROM stores WHERE zip IN ($zip_codes)");

En iyi performans için, size, geçici bir tablo oluşturmak gerekir Posta kodları ile doldurun ve bu gibi sorgu:

SELECT  *
FROM    stores
JOIN    temptable
ON      zip = tempvalue

Tabii ki bu ZIP sütun dizine yalnızca daha verimli olacaktır.

Ben sadece önceki kod parçacıkları bana bazı sözdizimi hataları verdi ve veritabanı sadece bir giriş yerine ilgili tüm verileri üzerinden spitted olduğunu atmak istiyoruz. Aşağıdaki kod parçası, benim için çalıştı:

implode("','", $zipNumbers);