为什么不向数组中添加字符串?

时间:2013-12-16 03:06:13

标签: php arrays wordpress implode

我有这段代码,但由于某种原因,没有添加逗号来分隔数组元素。我在俯瞰什么?

    $imgid = array();

    foreach ( $attachments as $attachment ) {
        $imgid[] = $attachment->ID;
  //    echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
    }

    $string = implode(',', $imgid);

    echo $string;

上面的foreach代码位于更大的foreach语句中:

foreach ($fileslist as $file) {

    if( $file === '.' || $file === '..' ) {
        continue;
    }

    $file = file_get_contents( $post_dir . "/" . $file);

    $filetype = "image/jpeg";

    $filename = "remote_filename_". $i .".jpg";

    $i++;


    xmlrpc_set_type($file,'base64'); // <-- required!
    $params = array($blogid,$username,$password,
                array('name'=>$filename,'type'=>$filetype,'bits'=>$file,'overwrite'=>false));
    $request = xmlrpc_encode_request('wp.uploadFile',$params);

    $result = go($request,$rpcurl);
    print_r($result);

    $attachments = get_posts( array(
        'post_type' => 'attachment',
        'posts_per_page' => 1,
        'post_status' => null,
        'post_mime_type' => 'image'
    ));

    $imgid = array();

    foreach ( $attachments as $attachment ) {
        $imgid[] = $attachment->ID;
  //    echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
    }


    $comma_separated = implode(",", $imgid);

    echo $comma_separated;

}

基本上,它的作用是将目录中的每个图像上传到WordPress。每个图像都有一个附件ID,我需要将每个附件ID保存为字符串,每个ID用逗号分隔。

编辑:Simon Robb为我提供了正确的答案。这是更新和最终代码:

foreach ($fileslist as $file) {

    if( $file === '.' || $file === '..' ) {
        continue;
    }

    $file = file_get_contents( $post_dir . "/" . $file);

    $filetype = "image/jpeg";

    $filename = "remote_filename_". $i .".jpg";

    $i++;


    xmlrpc_set_type($file,'base64'); // <-- required!
    $params = array($blogid,$username,$password,
                array('name'=>$filename,'type'=>$filetype,'bits'=>$file,'overwrite'=>false));
    $request = xmlrpc_encode_request('wp.uploadFile',$params);

    $result = go($request,$rpcurl);
    print_r($result);

    $attachments = get_posts( array(
        'post_type' => 'attachment',
        // 'posts_per_page' => 1,
        'post_status' => null,
        'post_mime_type' => 'image'
    ));

    $imgid = array();

    foreach ( $attachments as $attachment ) {
         $imgid[] = $attachment->ID;
  //    echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
    }


    echo "<br />";
    $comma_separated = implode(",", $imgid);

}

echo $comma_separated;

2 个答案:

答案 0 :(得分:0)

你的逻辑是合理的应该按预期工作。但是,如果没有看到更大的代码库,很难说出发生了什么。我唯一的猜测是游戏中有一个更大的循环。你的$imgid的启动每次重复都会重置数组:

$imgid = array();

您是否可以将逻辑中的数组init置于更高的位置?如果是这样,试试看看会发生什么。并且可能使用$attachment->ID分配索引键会有所帮助:

$imgid = array();

foreach ( $attachments as $attachment ) {
    $imgid[$attachment->ID] = $attachment->ID;
//    echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );
}

答案 1 :(得分:0)

我并非100%明确您的代码的工作方式,但目前$file循环中的每个$filelists只返回一个附件,因为{{1} } 'posts_per_page' => 1中的参数。因此get_posts变量只有一个元素,因此$imgid没有两个元素可以放置逗号。

您看到的输出实际上是为implode的每个循环输出的ID

如果您删除了$filelist参数,那么您将在'posts_per_page' => 1中拥有完整的附件数组,并且它应该可以正常工作。