Multidimensional Array

时间:2016-12-05 作者:Futwill

我在wordpress模板中有一个数组,我想在其中定位登录用户的特定状态。下面是我当前使用的$args,其中包含一个状态,并存储了所有状态值。

$user_id = get_current_user_id();
$args = array( 
    \'status\' => array( \'wcm-active\', \'wcm-delayed\', \'wcm-complimentary\', \'wcm-pending\', \'wcm-paused\', \'wcm-expired\', \'wcm-cancelled\' ),
);  
$active_memberships = wc_memberships_get_user_memberships( $user_id, $args );
然后,我想在我的主题模板中创建一些针对某个特定用户状态的if语句(例如,如果用户状态延迟,则显示此内容。下面是我所拥有的内容,但它似乎不正确,因此我认为我在针对键时出了问题:

if ($active_memberships = wc_memberships_get_user_memberships( $user_id, $args[0][1] )) {
   show content
}

1 个回复
SO网友:DarrenK

本例中的多维数组是多维关联数组或键值对。关键在于\'status\' 值是字符串数组。

在条件检查中,您试图通过数字索引访问值,在这种情况下,数字索引不存在,因为没有设置任何内容来使用这些索引。要访问上面设置的值,请执行以下操作:$args[\'status\'][1];

在php中,关联数组和数组被视为相同的类型,唯一的区别是,在访问字符串的关联数组键时会考虑到这一点。因此,有内置的php函数可以在关联数组(如foreach)上进行“迭代”,这可能会给人一种印象,即它们是截然不同的野兽,而事实并非如此。

有关更多信息,请查看以下php文档:http://php.net/manual/en/language.types.array.php特别是这个例子:http://php.net/manual/en/language.types.array.php#example-61

Update

尽管如此,在上面的代码中,由于条件检查的问题,它似乎失败了。

当执行if语句时,它会将变量重新分配给等号右侧函数的结果。因此,它将$active\\u memberships设置为等于wc\\u memberships\\u get\\u user\\u memberships()函数的结果。如果函数的结果不是false或NULL,或其他假值,则在设置时将通过检查$active_memberships 到新值。通过将其设置为一个新值,这有点破坏了该变量的用途,因为我想象您希望使用它存储用户的所有成员身份,然后稍后检查每个成员身份以显示特定内容或在代码中执行其他操作。

所以你可能打算$active_memberships 使用args返回一次,然后测试是否存在任何成员身份,然后测试是否存在任何特定的成员身份。例如:

if (!empty($active_memberships)) {
   // show content if the current user has any memberships

   if ( in_array(\'wcm-active\', $active_memberships) ) {
       // show content if \'wcm-active\' is present in the active_memberships
   }

   if ( in_array(\'wcm-delayed\', $active_memberships) ) {
       // show content if \'wcm-delayed\' is present in the active_memberships
   }

}
由您决定如何最好地构建这些控件,但这应该会让您取得更大的进步!

因此,在这篇文章中有一些学习。如何访问关联数组值和一些关于条件语句的信息—您可以在条件语句求值期间设置变量。在if语句中可以这样做,就像for循环在每次迭代中设置变量一样。然而,对于阅读此类代码的人来说,这种设置变量的方法通常是不清楚的,因此我倾向于避免使用它。

您可以在此处阅读有关php控制结构的更多信息:http://php.net/manual/en/language.control-structures.php

和比较运算符:http://php.net/manual/en/language.operators.comparison.php