php foreach循环 - 获取第一个,一旦完成获得第二个等等

时间:2018-01-19 17:35:44

标签: php wordpress foreach

有点奇怪,甚至不确定这是可能的,还是有更好的方法。

基本上,我有一个包含各种数据的“工作包”。主要的是名为CV Credits的东西 - 用户必须购买“CV Credits”来查看简历。一旦退出CV Credits,他们必须购买更多。更复杂的是,他们可以同时拥有许多不同的包。

所以我的逻辑是检查每个包,检查第一个并先用掉那里的积分,然后是第二个等等。如果没有,他们必须买 - 跟我一起?

好的,所以这里是我的代码(只收集第一个包中的信息)它是完美的,但是当变量$ how_many_left =“0”时,如何调整代码来检查第二个

PHP

$first = true;
 foreach ( $packages as $package ) {
     if ( $first ) {

         $package = wc_paid_listings_get_package( $package );
         $package_id = $package->get_id();

        $cv_credit = $wpdb->get_row( "SELECT cv_credit, cv_credit_count, cv_credit_duration, date_purchased, credit_value FROM `wp_wcpl_user_packages` WHERE id =  $package_id" );

        $amount_of_credits = $cv_credit->cv_credit;  // AMOUNT OF CREDITS THE PACKAGE HAS
        $how_many_used = $cv_credit->cv_credit_count; // THE AMOUNT THEY HAVE USED
        $credit_value = $cv_credit->credit_value; // WHAT THEY HAVE SEEN (COMMA SEPARATED)
        $how_many_left = $amount_of_credits - $how_many_used;
        $credit_duration = $cv_credit->cv_credit_duration;
        $date_purchased = $cv_credit->date_purchased;

         $timestamp = strtotime($date_purchased);
         $date_purchased_yday = date("d", $timestamp); // day of the year
         $dayend = $date_purchased_yday + $credit_duration - 1; // when it ends

         $today = getdate();
         $today_yday = $today["yday"]; // todays day of the year

         $timeleft = $dayend - $today_yday;

         if ($timeleft >= "0") {

if ($how_many_left >= "1") {

$createarrayofvalues = explode(',', $credit_value);

if (in_array($post->ID, $createarrayofvalues)) {

?>
    <div class="contact-information">
        <p>Mobile Number: <?php echo $mobile_number; ?> </p>
        <p>Email Address: <?php echo $email; ?> </p>
        <p>Links:
        <?php the_resume_links(); ?>
    </p>
    </div>
<?php
} // IF they have paid for the CV before
else {
    ?> <a href="#" class="et_pb_button cv_credit">View contact information (<?php echo $how_many_left ?> credit/s left)</a> <?php
}
} // how many left
else {
    echo "You have no more credits for this package";
}
}// time left on package
    else {
    }
$first = false;
    } // if First
    else {

    }

    }

然后我使用ajax在点击“查看联系信息”按钮时用另一个CV计数和其他信息更新数据库,如果他们有信用并且之前没有查看联系人详细信息。

我希望我有意义,请提出任何问题,因为那里有信息是代码的一部分,但没有必要在这个例子。

确认:我想检查循环中的第一个包 - 一旦没有更多的积分可供使用,我就转到下一个包等等。

提前致谢

1 个答案:

答案 0 :(得分:1)

基本上findPackageWithCredits会查找剩余信用额或返回null的包。这仍然可以做得更好,但也许它给你一些东西开始;)

<?php

handle($packages);

function handle($packages)
{
    global $post;

    $package = findPackageWithCredits($packages);

    if (null === $package) {
        echo "no credits left, buy more!";
        return;
    }

    if (in_array($post->ID, explode(',', $package->credit_value))) {
        showContact();
        return;
    }

    showCVInfo($package->cv_credit - $package->cv_credit_count);
}

function findPackageWithCredits($packages)
{
    foreach ($packages as $package) {
        $db_package = getValidatedDatabasePackage($package);

        if (null !== $db_package) {
            return $db_package;
        }
    }

    return null;
}

function getValidatedDatabasePackage($package)
{
    global $wpdb;

    $package    = wc_paid_listings_get_package($package);
    $package_id = $package->get_id();

    $cv_credit = $wpdb->get_row("SELECT cv_credit, cv_credit_count, cv_credit_duration, date_purchased, credit_value FROM `wp_wcpl_user_packages` WHERE id =  $package_id");

    $amount_of_credits = $cv_credit->cv_credit;  // AMOUNT OF CREDITS THE PACKAGE HAS
    $how_many_used     = $cv_credit->cv_credit_count; // THE AMOUNT THEY HAVE USED
    $how_many_left     = $amount_of_credits - $how_many_used;
    $credit_duration   = $cv_credit->cv_credit_duration;
    $date_purchased    = $cv_credit->date_purchased;

    $timestamp           = strtotime($date_purchased);
    $date_purchased_yday = date("d", $timestamp); // day of the year
    $dayend              = $date_purchased_yday + $credit_duration - 1; // when it ends

    $today      = getdate();
    $today_yday = $today["yday"]; // todays day of the year

    $timeleft = $dayend - $today_yday;

    if ($timeleft >= "0" && $how_many_left >= "1") {
        return $cv_credit;
    }

    return null;
}

function showContact()
{
    global $mobile, $email, $links;

    $message = '<div class="contact-information">
        <p>Mobile Number: %s </p>
        <p>Email Address: %s </p>
        <p>Links: %s
        </p>
    </div>';

    echo sprintf($message, $mobile, $email, $links);
}

function showCVInfo($remaining_credits)
{
    $message = '<a href="#" class="et_pb_button cv_credit">View contact information (%s credit/s left)</a>';

    echo sprintf($message, $remaining_credits);
}