如何匹配POST_META_DATA多维数组中的数据?

时间:2016-07-10 作者:Ramesh Pardhi

每当有人点击like按钮时,我都会将用户id保存在post meta中。

        $voter = Array(
                        voter => array(
                        \'post_id\' => $post_id,
                        \'user_id\' => $user_id,
                        \'user_ip\' => $user_ip,
                        \'author_id\' => $author_id,
                        \'vote\'    => $vote
                        )
                    );  
        add_post_meta($_POST[\'post_id\'], \'voter\', $voter);
        echo "success";
我只想在用户不喜欢这篇文章的情况下运行它。所以我用了这个:

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}
然后像这样使用if条件可以帮助我发现用户id是否已经在元数据中。

$voter_info = get_post_meta( get_the_ID() , \'voter\', false );
if (in_array_r("1533", $voter_info)){
                        echo "User is in post meta";
                    }
但问题是,此条件正在所有数组值中搜索用户id:1533。我想在“user\\u id”字段中搜索它。这让我很困惑。如果您对此有解决方案,或者您知道在多维数组中搜索的更好方法,那么请帮助我。

1 个回复
最合适的回答,由SO网友:Ismail 整理而成

这是一个与PHP相关的简单问题(最好在StackOverflow.com上提问),您可以通过迭代和匹配来发现多维数组中是否存在索引。例如:

function wpse231889_has_user_voted( $user_id, $post_id ) {
    if ( !empty( ( $voters = get_post_meta( $post_id, \'voter\' ) ) ) ) {
        foreach ( $voters as $voter ) {
            if ( !empty( $voter[\'voter\'][\'post_id\'] ) && (int) $user_id == (int) $voter[\'voter\'][\'post_id\'] ) {
                return true;
            }
        }
    } return false;
}
很高兴这有帮助。

相关推荐

Foreach循环内的if/ellif in_array仅显示一个POST的问题

如果某个类别的帖子对应一个类别,我会尝试为每个帖子指定一个特定的背景色。我的函数可以工作,但仅限于在结果中显示一篇文章。如果我删除此功能,将显示所有帖子。更多信息:在我的页面上,我有按类别筛选帖子的按钮。如果单击一次,我将显示该类别的所有帖子。但每个帖子都包含几个类别。我选择了一些类别来为每个帖子设置背景色,但这些类别与过滤器按钮不同。Wordpress显示此错误;您的站点出现严重错误,请了解有关调试WordPress的详细信息"E;在显示第一个帖子之后。以下是我的全部代码:<?php&#x