2012-01-09 22 views
10

Robię niektóre buforowanie sql niektórych zapytań. Używam CakePHP więc warunki kwerendy są w tablicy tak:Jaki jest najczystszy sposób na uzyskanie sumy kontrolnej tablicy wielowymiarowej?

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', 
), 
); 

Ja przeważnie szuka product_id, ale są też inne ewentualne warunki, więc chciałem zmniejszyć tablicę kontrolną i dołącz ją do nazwy pliku pamięci podręcznej. W ten sposób miałbym tutorials_by_classification-413a86af lub coś takiego i nie musiałbym wybierać całej tablicy.

Widziałem funkcję implode mutli-d array na php.net in the comments, ale zastanawiam się, czy istnieje prostszy sposób osiągnięcia mojego celu.

Odpowiedz

15

Co na temat serialize i md5? serialize tworzy łańcuchową reprezentację twojej tablicy; md5 tworzy skrót tego.

Przykład:

$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

Dzięki, właśnie to, czego potrzebowałem! Skończyło się na użyciu crc32 dla skrótów, ponieważ utrzymuje krótsze nazwy plików http://codepad.org/LhTotSth. –

10

ja po prostu to zrobić:

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

json_encode jest nieco szybciej niż serialize, ale można stracić niektóre z zalet serialize. Jednak to, co robisz, nie ma znaczenia.

+0

"json_encode jest nieco szybszy niż serializować". Według moich testów nie jest to - jest o 30% wolniejsze. (Ale oba są dość szybkie, więc prawdopodobnie nie jest to problemem). – lonesomeday

+0

Zgodnie z tym: https://bugs.php.net/bug.php?id=51267 Myślę, że to zależy od tego, czy twój tablica jest zagnieżdżona. –

+0

Albo moja tablica była zbyt prosta, aby to pokazać, albo błąd został naprawiony ... – lonesomeday

Powiązane problemy