web-dev-qa-db-ja.com

多次元配列に格納されている値を取得してエントリを合計する方法

メタキーがuser_metamy_postsmeta_valueに格納されている多次元値を取得しようとしています。

a:3:{i:0; s:2: "23"; i:1; s:2: "20"; i:2; s:1: "9";}

管理ページのどこかに、上の値に保存されている選択された投稿の合計を表示したいのですが…。

1
user3279

値がシリアル化されている場合は、WordPress関数を使ってメタデータを取得すると、そのデータはシリアル化されずに元に戻され、それを繰り返すことができます(配列のように見えます)。

$somevar = get_user_meta( '99999', 'your-key', true );

WordPressのオプションと同様に、ユーザーメタは配列またはオブジェクトの場合はシリアル化され、単一の値は文字列として格納されます(シリアル化されていない)。

get_user_metaを呼び出すと、シリアル化された文字列の代わりにデータの配列が返されます。自分でシリアル化してシリアル化解除する必要はありません。WordPressメタ関数は、metaの取得および設定時にmaybe_serializeおよびmaybe_unserializeを使用して処理します。

これはWPのオプション処理に似ていて、ほとんど同じことをしています、 " プラグインオプションテーブルに答えるときにこれをカバーしています、シリアル化されたデータです "..

ただし、より直接的に質問に答えるには、配列内の値を合計するには、次のようにarray_sumを使用します。前の例のvarに基づきます。

if( !empty( $somevar ) )
    $sum = array_sum( $somevar );

または..

$sum = 0;
if( !empty( $somevar ) ) {
    foreach( $somevar as $int )
        $sum = $sum + $int;
}

これが単純なkey => valueペアの配列であると仮定すると、どちらの方法でもうまくいくはずです。

6
t31os

PHPソリューション:

$tmp = 'a:3:{i:0;s:2:"23";i:1;s:2:"20";i:2;s:1:"9";}';
echo sum_array(unserialize($tmp));
1
Kaaviar

また、メタ値を配列としてキャストし、例としてwp_count_posts()と、それがwp-admin/edit-form-advanced.phpでどのように使用されているかを確認してください。

0
wyrfel