2013-10-14 65 views
1

我嘗試使用lpush使用Predis存儲的表單數據

$list = "flavors"; 
$array = array($_GET["mainid"], $_GET["flavor1"], $_GET["flavor2"], $_GET["flavor3"]); 
$redis = new Predis\Client(); 
$redis->lpush($list,implode("", $array)); 
echo $redis->lrange(0, -1); 

我曾嘗試使用hset

$redis->hset("flavors", $_GET["mainid"], $_GET["mainid"]); 
$redis->hset("flavors", $_GET['mainid'] . "flavor1", $_GET["flavor1"]); 
$redis->hset("flavors", $_GET['mainid'] . "flavor2", $_GET["flavor2"]); 
$redis->hset("flavors", $_GET['mainid'] . "flavor3", $_GET["flavor3"]); 
echo $redis->hgetall($_GET['mainid']); 

但我不能得到這工作,因爲我得到這個錯誤:http://pastie.org/8401717

我該如何解決這個問題?我認爲這是關於在期望一個字符串時給予一個數組的東西,但我有implode在那裏,所以爲什麼不工作?如果根本無法工作,我可以使用哪種Redis數據類型?

回答

1

使用lpush時出現此錯誤,因爲flavors密鑰已存儲在其他Redis數據類型中。所以你應該再次嘗試之前刪除該密鑰。

您還以錯誤的方式使用了lpush。你應該試試這個:

foreach ($array as $value) { 
    $redis->lpush($list, $value); 
} 

或者,如果你的Redis的API支持多PARAMS:

call_user_func_array(array($redis, 'lpush'), array_merge($list, $array)); 

如果您想通過mainid存儲口味,你可能想將其與多鍵存儲和使用lpush

$list = "flavor:{$_GET['mainid']}"; 
$redis->lpush($list, $_GET["flavor1"]); 
$redis->lpush($list, $_GET["flavor2"]); 
$redis->lpush($list, $_GET["flavor3"]); 

另一種方法是存儲在一個哈希和使用json_encode(不要使用破滅):

$data = json_encode(array($_GET["flavor1"], $_GET["flavor2"], $_GET["flavor3"])); 
$redis->hset('flavors', $_GET["mainid"], $data); 
+0

謝謝,使用json_encode和散列爲我工作。 – mountainlion88