2012-01-09 15 views
10

Bazı sorguların bazı sql önbelleklerini yapıyorum. Sorgu koşulları dolayısıyla bir dizi vardır bu yüzden CakePHP'yi kullanıyorum: Çoğunlukla product_id arıyorumÇok boyutlu bir dizinin sağlama toplamını elde etmenin en temiz yolu nedir?

array (
    0 => 
    array (
    0 => 'Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ', 
), 
    1 => 
    array (
    'Tutorial.status_id ' => 
    array (
     0 => 4, 
     1 => 7, 
    ), 
), 
    'OR' => 
    array (
    'Tutorial.user_id' => '40', 
), 
); 

, ancak bazı diğer olası durumlar vardır, bu yüzden bir sağlama toplamı için diziyi azaltmak istedik ve önbellek dosyasının adına ekleyin. Bu şekilde tutorials_by_classification-413a86af ya da bir şey olurdu ve diziden almak zorunda kalmazdım.

php.net in the comments'da mutli-d dizilerini yok etme işlevini gördüm, ancak amacımı gerçekleştirmenin daha basit bir yolu olup olmadığını merak ediyorum.

cevap

15

serialize ve md5 nasıl olur? serialize dizininin bir dize temsili oluşturur; md5, bir karma oluşturur.

Örnek:

$query = array (
    0 => 
    array (
    0 => 'Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ', 
), 
    1 => 
    array (
    'Tutorial.status_id ' => 
    array (
     0 => 4, 
     1 => 7, 
    ), 
), 
    'OR' => 
    array (
    'Tutorial.user_id' => '40', 
), 
); 

$query_string = serialize($query); 
$hash = md5($query_string); 

echo $query_string, "\n\n\n", $hash, "\n"; 

/* 
a:3:{i:0;a:1:{i:0;s:96:"Tutorial.id IN (SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1) ";}i:1;a:1:{s:19:"Tutorial.status_id ";a:2:{i:0;i:4;i:1;i:7;}}s:2:"OR";a:1:{s:16:"Tutorial.user_id";s:2:"40";}} 


a5cb59f0ee259961e426c7ce9b7b8f32 
*/ 
+0

Teşekkürler, sadece ihtiyacım olan şey! Ben hashes için crc32 kullanarak bitti çünkü dosya adlarını daha kısa tutuyor çünkü http://codepad.org/LhTotSth. –

10

Sadece bu yapardın:

$checksum = md5(json_encode($array)); 

json_encode hızlı serialize biraz daha, ama, tefrika faydalarından bazıları kaybeder. Ancak, yaptığınız şey için bu önemli değil.

+0

"json_encode, serileştirilmesinden biraz daha hızlıdır". Kriterlere göre, bu değil - yaklaşık% 30 daha yavaş. (Ama ikisi de oldukça hızlıdır, bu yüzden muhtemelen bir endişe değildir.) – lonesomeday

+0

Buna göre: https://bugs.php.net/bug.php?id=51267 Sanırım bu sizin dizi iç içe. –

+0

Ya dizim bunu göstermek için çok basit, ya da hata düzeltildi ... – lonesomeday

İlgili konular