6

Redis の移行に Predis を使い始めたばかりで、zadd 関数を配列で動作させるのに問題があります。

このコードは機能します:

foreach ($userIndexArr as $row) {
  $usernames[] = 0;
  $usernames[] = $row['username']; 
  $result = $this->cache->zadd('@person', 0, $row['username']);
}

これはしません:

foreach ($userIndexArr as $row) {
  $usernames[] = 0;
  $usernames[] = $row['username']; 
}
try {
    $result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}           

エラーはスローされません。どんな助けでも大歓迎です!

-J

4

3 に答える 3

5

私はこれをいじってみましたが、これに苦労している場合は、次の例がきっと役に立ちます ( redis.io ドキュメントの例に従ってください):

$predis->zadd( 'myset', [ "one" => 1, "uno" => 1, "two" => 2, "three" => 3 ] )

これにより、redis の例と同じソートされたセットが得られます。

ZADD myzset 1 "one"
ZADD myzset 1 "uno"
ZADD myzset 2 "two" 3 "three"

これのトリッキーな部分は、Redis でこれを 1 行で実行したい場合、次のようにスコアを最初に配置します。

ZADD myzset 1 "one" 1 "uno" 2 "two" 3 "three"

Predis では、これも同様に機能します。

$predis->zadd( 'myset', 1, "one", 1, "uno", 2, "two", 3, "three" );
于 2016-05-30T19:55:48.340 に答える
0

このソースによると、以下を試してください: https://github.com/nrk/predis/blob/v1.0/src/Command/ZSetAdd.php

foreach ($userIndexArr as $row) {
    $usernames[$row['username']] = 0; 
}
try {
    $result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

ただし、テストされていません。しかし、v1.0を使用している限り、機能すると思います=)

于 2014-10-22T20:06:15.763 に答える