数组获取特定字段

时间:2017-12-22 14:44:19

标签: php arrays wordpress

我在WordPress中有一个变量(使用Visual Composer插件模板)

$posts_query = $settings['posts_query']

当我打印__

print_r($posts_query);

结果:

size:4|order_by:date|post_type:donation_slider|post_status:publish

我如何获得字段post_type?

我试过$posts_query['post_type'],但它只显示了字母" s"或$posts_query->post_type;显示空白!

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

这是一种非典型的情况,也是一种存储信息的非典型方式。看起来有人决定发明自己的serialization存储(将数组存储在字符串中)。

要访问所需信息,您需要使用explode将字符串操作到各种数组组件中。

这里有一些代码可以帮助您入门:

// $posts_query is equal to "size:4|order_by:date|post_type:donation_slider|post_status:publish"

$parts = explode('|', $posts_query);
// now parts is an array: ['size:4', 'order_by:date', 'post_type:donation_slider', 'post_status:publish'
$array = [];

// loop over the exploded parts
foreach( $parts AS $part ) {
    // split the sub-parts apart
    $split = explode(':', $part);
    // glue it into a proper associative array
    $array[$split[0]] = $split[1];
}

现在你有一个看起来像这样的数组:

array(
    'size'        => 4,
    'order_by'    => 'date',
    'post_type'   => 'donation_slider',
    'post_status' => 'publish'
)

您可以像这样访问每个单独的部分:

$post_type = $array[ 'post_type']; // returns "donation_slider"

答案 1 :(得分:0)

我不太了解WordPress,但原生的PHP方法是这样的:

match

答案 2 :(得分:0)

看起来像一个内爆的字符串。元素由Unused Registry Settings分隔,键和值由|分隔。您可以使用explode创建所需的阵列:

:

然后你可以像在问题中一样使用数组。

答案 3 :(得分:0)

我找到了这个解决方案:

    $post_type_query = explode("|", $posts_query);  
    $post_type  = str_replace("post_type:","",$post_type_query[2]);

并打印post_type的值。

非常感谢你的帮助,我很感激!

答案 4 :(得分:0)

另一种解决方案:

$posts_query似乎是一个字符串,因此像数组一样访问它不会取出'post_type'

您可以尝试使用此功能(来源:http://php.net/manual/en/function.explode.php),这会使$posts_query中的新数组成为|,而:是数据字段和post_type之间的分隔符键和值之间的分隔符。然后,您可以$parsed_posts_query['post_type']获得function explode_with_keys($delim1,$delim2,$inputstring) { $firstarr = explode($delim1,$inputstring); $finalarr = array(); foreach($firstarr as $set) { $setarr = explode($delim2,$set); $finalarr[$setarr[0]] = $setarr[1]; } return $finalarr; } $parsed_posts_query = explode_with_keys("|",":",$posts_query); print_r($parsed_posts_query['post_type']); ,如图所示。

process.log = {};
process.traceMethodCalls = function (obj) {
    return new Proxy(obj, {
        get(target, method, receiver) {
            if (typeof process.log[method] === 'undefined') {
                process.log[method] = { calls: 0, params: new Set() };
            }
            return function (...args) {
                process.log[method].calls += 1;
                process.log[method].params.add(JSON.stringify(args));
                return target[method].apply(this, args);
            };
        }
    });
}