2012-01-09 35 views
10

Tôi đang làm một số bộ nhớ đệm sql của các truy vấn nhất định. Tôi đang sử dụng CakePHP để các điều kiện tìm kiếm sẽ được trong một mảng như sau:Cách nào sạch nhất để kiểm tra mảng đa chiều?

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

tôi chủ yếu là tìm kiếm các product_id, nhưng có một số điều kiện có thể khác, vì vậy tôi muốn giảm của mảng với checksum và thêm nó vào tên của tệp bộ đệm. Bằng cách này tôi sẽ có tutorials_by_classification-413a86af hoặc một cái gì đó, và tôi sẽ không phải chọn thông qua mảng.

Tôi đã nhìn thấy hàm để kích hoạt các mảng mutli-d trên php.net in the comments, nhưng tôi tự hỏi nếu có một cách đơn giản hơn để đạt được mục tiêu của mình.

Trả lời

15

Làm thế nào về serializemd5? serialize tạo ra một chuỗi đại diện cho mảng của bạn; md5 tạo một băm của nó.

Ví dụ:

$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

Cảm ơn, chỉ cần những gì tôi cần! Tôi đã kết thúc bằng cách sử dụng crc32 cho băm vì nó giữ tên tập tin ngắn hơn http://codepad.org/LhTotSth. –

10

tôi sẽ chỉ làm điều này:

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

json_encode là hơi nhanh hơn so với serialize, nhưng bạn mất một số lợi ích của việc sắp đặt. Tuy nhiên, đối với những gì bạn đang làm, điều đó không quan trọng.

+0

"json_encode hơi nhanh hơn serialize". Theo tiêu chuẩn của tôi, nó không phải - nó chậm hơn khoảng 30%. (Nhưng chúng đều khá nhanh, vì vậy mà có lẽ không phải là một mối quan tâm.) – lonesomeday

+0

Theo điều này: https://bugs.php.net/bug.php?id=51267 Tôi đoán nó phụ thuộc vào việc bạn có hay không mảng được lồng nhau. –

+0

Hoặc mảng của tôi quá đơn giản để hiển thị lỗi này hoặc lỗi đã được sửa ... – lonesomeday

Các vấn đề liên quan