【问题标题】:Array get specific field数组获取特定字段
【发布时间】:2017-12-22 14:44:18
【问题描述】:

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

$posts_query = $settings['posts_query']

当我 print_r 时

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; 它显示为空白!

有什么想法吗?

【问题讨论】:

  • 为什么是标签R
  • 你能做到var_dump($posts_query)吗?我怀疑它是一个字符串,而不是一个数组。
  • 可能是字符串变量,我是php新手,这里是var_dump string(66)的结果

标签: php arrays wordpress


【解决方案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"

【讨论】:

    【解决方案2】:

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

    $posts_query = 'size:4|order_by:date|post_type:donation_slider|post_status:publish';
    
    foreach( explode( '|', $posts_query ) as $pairs )
    {
        if( explode( ':', $pairs )[0] === 'post_type' )
        {
            echo explode( ':', $pairs )[1];
            break;
        }
    }
    

    【讨论】:

      【解决方案3】:

      看起来像一个内爆的字符串。元素用|分隔,键和值用:分隔。你可以使用explode来创建你想要的数组:

      $array = [];
      foreach( explode($posts_query, '|') as $keyVal) {
        $tmp = explode($keyVal, ':');
        $array[$tmp[0]] = $tmp[1];
      }
      

      然后您可以像在问题中那样使用数组。

      【讨论】:

        【解决方案4】:

        我找到了这个解决方案:

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

        并打印 post_type 的值。

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

        【讨论】:

          【解决方案5】:

          另一种解决方案:

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

          您可以尝试使用此函数(来源:http://php.net/manual/en/function.explode.php),这会在$posts_query 中创建一个新数组,其中| 是数据字段之间的分隔符,: 是键和值之间的分隔符。然后就可以像$parsed_posts_query['post_type']一样得到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']);
          

          【讨论】:

            猜你喜欢
            • 2019-07-24
            • 2017-08-06
            • 2023-04-06
            • 1970-01-01
            • 2019-05-11
            • 1970-01-01
            • 2021-11-09
            • 2019-08-12
            • 1970-01-01
            相关资源
            最近更新 更多