Многомерный массив

У меня есть массив в моем шаблоне 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 } 

Solutions Collecting From Web of "Многомерный массив"

Многомерный массив в этом случае представляет собой многомерный ассоциативный массив или пару ключ-значение. Ключ – это '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 # пример-61

Обновить

Все, что сказано, в коде выше кажется, что он терпит неудачу из-за проблемы с условными проверками.

Когда выполняется оператор if, он переставляет переменную в результат функции справа от знака равенства. Таким образом, значение $ active_memberships устанавливается равным результату функции wc_memberships_get_user_memberships (). Если результат функции не является ложным или NULL или каким-либо другим значением false, он будет передавать проверку при установке $active_memberships в новое значение. Установив это на новое значение, это как бы разрушает цель этой переменной, так как я предполагаю, что вы хотите использовать ее для хранения всех членских составов пользователя, а затем проверить, чтобы каждое членство позже отображало конкретный контент или делало что-то еще в код.

Возможно, вы планируете просто устанавливать $active_memberships один раз с вашими аргументами, а затем проверять наличие каких-либо членских $active_memberships а затем и любых конкретных членов. Например:

 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 } } 

Вам решать, как лучше структурировать эти элементы управления, но это должно заставить вас двигаться дальше!

Так что в этом посте есть кое-какие знания. Как получить доступ к значениям ассоциативного массива и немного об условных операторах – вы можете установить переменные во время оценки условного оператора. Вы можете сделать это в том случае, если инструкции так же, как и цикл for, будут устанавливать переменную на каждой итерации. Этот способ установки переменной часто неясно человеку, читающему такой код, хотя я бы старался его избежать.

Подробнее о структурах управления php вы можете прочитать здесь: http://php.net/manual/en/language.control-structures.php

И операторы сравнения здесь: http://php.net/manual/en/language.operators.comparison.php