将一个数组附加到同一循环中的另一个数组

时间:2012-10-01 17:51:45

标签: mysql arrays merge

这适用于自定义Wordpress页面,但我认为基本的数组原则应该适用。我之前没有使用复杂的数组,所以有点迷失,试验和错误还没有成功。

我有一个帖子数据库,每个帖子都有meta_key的'shop'和'expired'。 '过期'是一个日期(YYYY-MM-DD),用于告知访问者何时邮件的内容过期,并且此密钥是我正在尝试使用的。

如果帖子的“已过期”日期在今天之前,则会显示“优惠已过期”

如果将来“过期”日期,则会显示“优惠在X天内过期”(此脚本未在下方显示,无需)

帖子按其“过期”日期ASC的顺序列出。问题是,当一个帖子到期时,我希望该帖子最后显示而不是保持最佳状态。

我目前看到的例子:

Post 1 | Expired 3 days ago
Post 2 | Expired 1 day ago
Post 3 | Expires in 2 days
Post 4 | Expires in 6 days

我想看到的(注意帖子X顺序):

Post 3 | Expires in 2 days
Post 4 | Expires in 6 days
Post 2 | Expired 1 day ago
Post 1 | Expired 3 days ago

这是我的数组代码,我试图合并这两个

$postid = get_the_ID();
$meta1 = get_post_meta($postid, 'shop', true);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$today = date('Y-m-d', time());

$args = array(
'post_type' => 'post',
'meta_query' => array(
    array(
        'key' => 'shop',
        'value' => $meta1
    )
),
'paged' => $paged,
'posts_per_page' => '5',
'meta_key' => 'expired',
'meta_value' => $today,
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
 );

$args2 = array(
'post_type' => 'post',
'meta_query' => array(
    array(
        'key' => 'shop',
        'value' => $meta1
    )
),
'meta_key' => 'expired',
'meta_value' => $today,
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'DESC'
);

$final = $args + $args2;
$query = new WP_Query( $final );

while ( $query->have_posts() ) : $query->the_post(); ?>
HTML FOR DISPLAYING POST
endwhile;

目前它似乎没有注意到“$ args2”而只显示$ args

我确信我的想法是正确的,需要创建两个数组并使用“+”而不是array_merge()连接它们,但那是我无法进一步的。

有人可以请点亮一些吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你不能只使用args + args2语法将2个数组加在一起。 PHP无法知道你的意思。如果您希望结果是包含这两个数组的数组,则可以执行以下操作:

$ final = array($ args,$ args2)

否则我不确定你希望这两个数组组合在一起。如果你澄清他们需要如何结合,我们可以提供更多帮助。

答案 1 :(得分:0)

如果我理解你的要求,那么你想要实现的解决方案实际上是不可能的。让我解释为什么这是不可能实现的。

在你的两个数组$args$args2中,大多数值相同而且留下两个赔率,我只选择一个来说明:

//it's in args    
'meta_compare' => '>'
//it's in args2
'meta_compare' => '<'

现在,当您尝试使用array_merge($args , $args2)合并这两个时会发生什么:

'meta_compare' => '<'

这意味着它从后面的数组中获取'meta_compare',这里是$args2。这是doc:

中定义的array_merge函数的行为

If the input arrays have the same string keys, then the later value for that key will overwrite the previous one

现在,如果您正在使用+数组联合运算符$args+$args2

'meta_compare' => '>'

这意味着它从第一个数组$args获取'meta_compare'。这是doc:

中定义的+数组联合运算符的行为

The keys from the first array will be preserved. If an array key exists in both arrays, then the element from the first array will be used and the matching key's element from the second array will be ignored.

为什么会发生这种情况,因为在同一级别 键必须是唯一的 。所以在你的情况下,他们处于同一水平:

$args = array ('key' => 'value1')
$args2= array ('key' => 'value2')

所以 只有一个 值可以存在,因为合并后的数组'key'可以指向 只有一个

如果是这种情况:

$args [0] = array ('key' => 'value1' ) 
$args2 [1]= array ('key' => 'value2' ) 

然后key存储的两个值都将被重新获得。这将是结果数组:

array(2) {
  [0]=>
  array(1) {
    ["key"]=>
    string(6) "value1"
  }
  [1]=>
  array(1) {
    ["key"]=>
    string(6) "value2"
  }
}

虽然我不是WP的极客,但据我所知WP_query你不能通过这样的args( 我不确定 )。因此,只留下一种方法来实现这一目标。您可以单独传递这两个参数并合并结果,结果很可能( 我不确定 )将是一个2D阵列,您可以轻松地合并它们。

希望有所帮助。 快乐的编码:)