【问题标题】:php query in loop echo's duplicates循环回显重复项中的php查询
【发布时间】:2013-07-10 01:26:28
【问题描述】:

这是一个循环,列出了用户购买的所有产品(数字访问通行证)。 我希望在每个产品旁边显示一个 Wordpress 帖子特色图片。 但是,DAP 产品和 Wordpress 帖子之间没有牢固的关系。所以我的解决方法是确保 DAP 产品与 WP Post 具有相同的名称/标题。 我的问题是,使用我到目前为止的代码(在哈希标签之间),它基本上运行循环中每个 DAP 产品的查询,因此为 X 数量的 DAP 产品吐出重复项。

因此,如果存在三个 DAP 产品,并且其中两个具有与 WP 帖子匹配的标题,则结果如下所示...

16521652

希望这是有道理的。 感谢任何帮助。

global $wpdb;

//loop over each product from the list
foreach ($userProducts as $userProduct) {
    if($productid != "ALL") {
        $productIdArray = explode(",",$productid);

        //if( $userProduct->getProduct_id() != $productid ) {
        if( !in_array($userProduct->getProduct_id(), $productIdArray) ) {
            continue;
        }
    }

    $product = Dap_Product::loadProduct($userProduct->getProduct_id());

    $expired = false;
    if($user->hasAccessTo($product->getId()) === false) {
        $expired = true;
    }



    //##########################################################################

    /*1.Get post ID by post title if you know the title or the title variable*/

    $postid = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_title = '" . $product->getName() . "'" );
    $postname = $wpdb->get_var( "SELECT post_title FROM $wpdb->posts WHERE post_title = '" . $product->getName() . "'" );

    if ($product->getName() == $postname):
    echo $postid;
    endif;

    /*2.use get_post($post_id) to get whatever you want to echo*/
    $getpost= get_post($postid);
    $postcontent= $getpost->post_content;
    echo $postcontent;

    //##########################################################################

    $content .= '</div>';
    $content .= '<br/><br/>';
} //end foreach

return $content;

【问题讨论】:

    标签: php loops duplicates echo


    【解决方案1】:

    一种快速的解决方法是将检索到的帖子名称/ID 存储在一个数组中;为避免重复,在存储每个值之前,请检查它是否已存储:

    if (in_array($postid,$values)==false) $values[] = $postid;
    

    然后,检索所有值(即循环之后),继续获取帖子并发布其内容。

    编辑:

    您介意告诉我如何将值存储在数组中吗?

    循环之前,初始化数组:

    $values = array();
    

    检索$postid$postname后,检查产品名称是否与帖子名称相同,将值放入数组中:

    if (in_array($postid,$values)==false) $values[] = $postid;
    

    循环结束后,您将获得您正在寻找的帖子的 ID。使用另一个 foreach 循环迭代 $values 数组并使用它们。

    【讨论】:

    • 感谢您的回复。你介意告诉我如何将值存储在数组中吗?我真的不知道如何使用数组。我将如何使用那行代码?
    • 收到此错误...警告:in_array() [function.in-array]:第二个参数的数据类型错误
    • 我似乎无法弄清楚如何将 select 查询中的值作为数组存储到 $values 中。人们似乎总是使用 while 循环来执行此操作,但在这种情况下,我需要查询以使用已经存在的 while 循环。
    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多