【问题标题】:Php filter object by key who contains a string [duplicate]Php按包含字符串的键过滤对象[重复]
【发布时间】:2020-12-22 10:12:42
【问题描述】:

我不熟悉 PHP,我遇到了过滤数组对象的问题。

我有一个函数 (get_post_meta_for_api) 向我返回一个数组对象,但有很多我不需要的属性...

所以我想按包含“seopress”的键过滤我的对象

function get_post_meta_for_api( $object ) {
    $post_id = $object['id'];
 
    return get_post_meta( $post_id );
}

提前感谢您的帮助:)

【问题讨论】:

  • 感谢您的回复。但是它可以用于按键而不是对象来过滤数组
  • 我现在有点迷路了。 get_post_meta 返回一个数组。您想保留任何键中存在seopress 的元素,还是所有元素都具有这些键,但您只想从对象中消除其他非seopress 键?
  • 我将想要过滤的回复添加到我的帖子中。我只想保留包含“seopress”的键:)

标签: php wordpress object filter


【解决方案1】:

根据文档,get_post_meta 返回一个数组 (https://developer.wordpress.org/reference/functions/get_post_meta/), 这应该工作:

function get_post_meta_for_api( $object ) {

    return array_filter(
        get_post_meta($object['id']),
        function ($key) {
            return preg_match('/_seopress_*/', $key) === 1;
        },
        ARRAY_FILTER_USE_KEY
    );
}

【讨论】:

    【解决方案2】:

    查看get_post_meta 了解有关如何使用它的更多信息。

    get_post_meta 带有检索单个元值的选项。这是一个示例,使用您想要获取的元值。

    get_post_meta($post_id, 'seopress', true);
    

    第一个参数是post id,第二个是元键,第三个是如果你想要一个值。 第三个参数中没有 true 的 get_post_meta 将返回一个包含该值的数组,如果为 true 它将按原样返回该值。

    【讨论】:

    • 感谢您的回复,但我认为它适用于完全匹配。在我的情况下,我需要包含“seopress”的密钥并且它与它不完全匹配
    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多