若数组中的值不存在,PHP不显示变量

若数组中的值不存在,PHP不显示变量,php,arrays,Php,Arrays,我不确定我问的问题是否正确,但我一直被困在如何防止值在数组中不存在时重复出现的问题上。以下是该阵列的一个示例: Array ( [meta_id] => 995 [order_item_id] => 83 [meta_key] => Booking Date [meta_value] => February 7, 2015 ) Array ( [meta_id] => 996 [order_item_i

我不确定我问的问题是否正确,但我一直被困在如何防止值在数组中不存在时重复出现的问题上。以下是该阵列的一个示例:

Array ( 
    [meta_id] => 995 
    [order_item_id] => 83 
    [meta_key] => Booking Date 
    [meta_value] => February 7, 2015 
) 
Array ( 
    [meta_id] => 996 
    [order_item_id] => 83 
    [meta_key] => Booking Time 
    [meta_value] => 7:00 am 
) 
Array ( 
    [meta_id] => 997 
    [order_item_id] => 83 
    [meta_key] => First Name - First Name 
    [meta_value] => Dan 
) 
Array ( 
    [meta_id] => 998 
    [order_item_id] => 83 
    [meta_key] => Church Information - Church Name 
    [meta_value] => Colonial Hills Baptist Church 
) 
Array ( 
    [meta_id] => 1010 
    [order_item_id] => 84 
    [meta_key] => Booking Date 
    [meta_value] => January 8, 2015 
) 
Array ( 
    [meta_id] => 1011 
    [order_item_id] => 84 
    [meta_key] => Booking Time 
    [meta_value] => 2:00 am 
) 
Array ( 
    [meta_id] => 1012 
    [order_item_id] => 84 
    [meta_key] => First Name - First Name 
    [meta_value] => Gary 
) 
Array ( 
    [meta_id] => 1013 
    [order_item_id] => 84 
    [meta_key] => Church Information - Church Name 
    [meta_value] => Victory Bible Church 
)
Array ( 
    [meta_id] => 973 
    [order_item_id] => 81 
    [meta_key] => Booking Date 
    [meta_value] => March 7, 2015 
) 
Array ( 
    [meta_id] => 974 
    [order_item_id] => 81 
    [meta_key] => Booking Time 
    [meta_value] => 3:00 am 
) 
Array ( 
    [meta_id] => 975 
    [order_item_id] => 81 
    [meta_key] => First Name - First Name 
    [meta_value] => Dan 
)
Array ( 
    [meta_id] => 925 
    [order_item_id] => 77 
    [meta_key] => Booking Date 
    [meta_value] => January 1, 2015 
) 
Array ( 
    [meta_id] => 926 
    [order_item_id] => 77 
    [meta_key] => Booking Time 
    [meta_value] => 10:00 am 
) 
Array ( 
    [meta_id] => 927 
    [order_item_id] => 77 
    [meta_key] => First Name - First Name 
    [meta_value] => Kent 
) 
...
您可以在这些数组中看到它们是按order\u item\u id键分组的。您还将看到order_item_id为81和77的数组没有教会信息-教会名称meta_键和meta_值

以下是生成这些数组的代码:

foreach( $order_items as $order_item ) {
                            $item_meta = $wpdb->get_results("
                                SELECT  *
                                FROM        {$wpdb->prefix}woocommerce_order_itemmeta
                                WHERE   order_item_id = " . $order_item->order_item_id . "
                            ");

                            $meta_array = objectToArray( $item_meta );

                            foreach( $meta_array as $data ) {

                                    if( $data['meta_key'] == 'Booking Date' ) 
                                        $date = $data['meta_value'];
                                    if( $data['meta_key'] == 'Booking Time' )
                                        $time = $data['meta_value'];
                                    if( $data['meta_key'] == 'First Name - First Name' )
                                        $fname = $data['meta_value'];
                                    if( $data['meta_key'] == 'Church Information - Church Name' )
                                        $church = $data['meta_value'];
                                    if( $data['meta_key'] == 'Church Information - City' )
                                        $city = $data['meta_value'];
                                    if( $data['meta_key'] == 'Church Information - State' )
                                        $state = $data['meta_value'];
                            }

                            echo $fname . ', ' . $church . '<br>';

                        }
如您所见,$church变量的结果正在重复,并显示在不存在该值的区域中。在上面的结果中,只有加里应该有“胜利圣经教会”的价值观

有人能帮我解决这个问题吗


谢谢

您需要在每个周期初始化变量,如下所示:

foreach( $order_items as $order_item ) {
    $item_meta = $wpdb->get_results("
        SELECT  *
        FROM        {$wpdb->prefix}woocommerce_order_itemmeta
        WHERE   order_item_id = " . $order_item->order_item_id . "
    ");

    $meta_array = objectToArray( $item_meta );

    $date = "";
    $time = "";
    fname = "";
    $church = "";
    $city = "";
    $state = "";

    foreach( $meta_array as $data ) {

            if( $data['meta_key'] == 'Booking Date' ) 
                $date = $data['meta_value'];
            else if( $data['meta_key'] == 'Booking Time' )
                $time = $data['meta_value'];
            else if( $data['meta_key'] == 'First Name - First Name' )
                $fname = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - Church Name' )
                $church = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - City' )
                $city = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - State' )
                $state = $data['meta_value'];
    }

    echo $fname . ', ' . $church . '<br>';

}
foreach($order\u项目作为$order\u项目){
$item\u meta=$wpdb->get\u结果(“
挑选*
从{$wpdb->prefix}woocommerce\u order\u itemmeta
其中order\u item\u id=“.$order\u item->order\u item\u id.”
");
$meta\u array=objectToArray($item\u meta);
$date=“”;
$time=“”;
fname=“”;
$church=“”;
$city=“”;
$state=“”;
foreach($meta_数组作为$data){
如果($data['meta_key']=='Booking Date')
$date=$data['meta_value'];
否则如果($data['meta_key']=='Booking Time')
$time=$data['meta_value'];
else if($data['meta_key']=='First Name-First Name')
$fname=$data['meta_value'];
else if($data['meta_key']==“教堂信息-教堂名称”)
$church=$data['meta_value'];
否则如果($data['meta_key']=='Church Information-City')
$city=$data['meta_value'];
else if($data['meta_key']=='Church Information-State')
$state=$data['meta_value'];
}
echo$fname.,“.$church.”
; }
您需要初始化循环中的变量,否则将使用旧值,如果第一条记录未设置,则在开始时会出现
未定义变量的问题。2种方法:在所有ifs之前将所有变量(城市、教堂等)预设为空字符串,或者使用else语句将它们设置为空StringThreak@jeroen下面的答案让我看看初始化变量的含义。我正在编写自定义代码,以显示WooCommerce Bookings插件中Wordpress的特殊数据的预订日期。由于我是PHP新手,我想看看您是否可以查看我的代码并检查效率是否低下:()。该代码最终可以查询多达8700个订单。结果可以在这里看到:()
foreach( $order_items as $order_item ) {
    $item_meta = $wpdb->get_results("
        SELECT  *
        FROM        {$wpdb->prefix}woocommerce_order_itemmeta
        WHERE   order_item_id = " . $order_item->order_item_id . "
    ");

    $meta_array = objectToArray( $item_meta );

    $date = "";
    $time = "";
    fname = "";
    $church = "";
    $city = "";
    $state = "";

    foreach( $meta_array as $data ) {

            if( $data['meta_key'] == 'Booking Date' ) 
                $date = $data['meta_value'];
            else if( $data['meta_key'] == 'Booking Time' )
                $time = $data['meta_value'];
            else if( $data['meta_key'] == 'First Name - First Name' )
                $fname = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - Church Name' )
                $church = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - City' )
                $city = $data['meta_value'];
            else if( $data['meta_key'] == 'Church Information - State' )
                $state = $data['meta_value'];
    }

    echo $fname . ', ' . $church . '<br>';

}