获得警告:implode():收到var值后

时间:2018-05-24 06:53:06

标签: php wordpress

我遇到以下错误:

  

警告:array_map():参数#2应该是......

中的数组      

警告:implode():在第1918行的wp-includes / class-wp-query.php中传递的参数无效

在我的php上,我收到了另一个页面的var,我这样做:

$myId = $_POST['varPostId'];
$parts = explode(',', $myId);

然后我需要读取该值

query_posts(array(
    'post__in' => $myId
));

但是我得到了上述错误。

如果我这样做:

    'post__in' => $parts
));

我得到一个空白页。

我尝试使用implode

$myId = $_POST['varPostId'];
$parts = implode(',', $myId);

直接在查询中获取值

query_posts(array(
    'post__in' => $_POST['varPostId']
));

$_POST['varPostId']是单个值,例如405

1 个答案:

答案 0 :(得分:0)

您从POST请求获得的值似乎只包含一个帖子ID,该ID应该是一个int,但可能是一个字符串。你需要做一些类型和错误检查。希望以下类似的东西可以起作用。我看到query_postspost__in,我假设WordPress在这里发挥作用?

// Put your ID into a variable and sanitize it
$myId = sanitize_key( $_POST['varPostId'] );

// Force it to an int (in case it's not from sanitize_key)
$myId = (int) $myId;

// Don't explode because it's not appropriate here
// $parts = explode( ',', $myId );

// Add the post id to the arguments as an array
query_posts(
  array(
    'post__in' => array( $myId )
  )
);

要跟进explode这里不合适的原因,它用于转换字符串,通常是这样的:

  

哦,你好,世界

进入包含多个项目的数组,如下所示:

$asdf = array(
  0 => 'oh',
  1 => 'hello',
  2 => 'world'
);

但是你似乎没有逗号分隔的post id字符串,你只需要一个这样的字符串,所以最好不要在这里使用。

正如评论中已经说明的那样,explode接受一个字符串并将其拆分为一个项目数组。 implode恰恰相反。它需要一个数组并将其压缩成一个字符串。

所以你可以拥有如下内容:

$myArray = array(
  0 => 'hello',
  1 => 'world'
);

// Convert to a string
$myString = implode( ', ', $myArray );

echo $myString; // prints: hello, world

// Convert back to an array
$myString = explode( ', ', $myArray );

var_dump( $myString ); // prints the array above