2016-04-15 2 views
1

Я довольно новичок в PHP, поэтому мой вопрос может иметь очень простой ответ, но я искал форум ACF и Google без везения. Надеюсь, кто-то здесь может помочь.Получить общее число из нескольких полей post post

У меня есть четыре поля многопозиционного объекта публикации на моей странице, и я пытаюсь получить общее количество сообщений (или в моем случае персонала) в этих пост-объектах. Я хотел бы как-то объединить их, чтобы я мог использовать общее число с условным.

Я могу получить сумму за один объект post, используя count().

$instructor = get_field('course_instructors'); 

if (count($instructors) > 1) { 
    // dosomething... 
} 

но при попытке добавить их вместе в count() не работает.

$instructor = get_field('course_instructors'); 
$leaders = get_field('course_leaders'); 
$designers = get_field('course_designers'); 
$speakers = get_field('course_speakers'); 

if (count($instructors + $leaders + $designers + $speakers) > 1) { 
    // dosomething... 
} 

Я также попытался array_merge() и другие функции массива не повезло, но я не на 100% уверен, что выход почтового объекта является массив ... хотя это выглядит, как это, когда я использую print_r().

В идеале мой код будет работать что-то вроде этого:

$instructor = get_field('course_instructors'); 
$leaders = get_field('course_leaders'); 
$designers = get_field('course_designers'); 
$speakers = get_field('course_speakers'); 
$all_staff = $instructors + $leaders + $designers + $speakers; 

if (count($all_staff) > 1) { 
    // dosomething... 
} 

Когда я делаю это я получаю сообщение об ошибке: «Критическая ошибка: неподдерживаемые типы операндов в ...».

Надеюсь, кто-то может ответить на этот вопрос мне или по крайней мере указать в правильном направлении. Спасибо заранее. Очень признателен!

ответ

0

Вот решение, которое в конечном итоге работает для меня: (. На основе предложений, представленных Джоном Хюбнер на my post on the ACF support forum)

$instructors_total = 0; 
$instructors = get_field('instructors'); 
if (is_array($instructors)) { 
    $instructors_total = count($instructors); 
} 

$leaders_total = 0; 
$leaders = get_field('leaders'); 
if (is_array($leaders)) { 
    $leaders_total = count($leaders); 
} 

$designers_total = 0; 
$designers = get_field('designers'); 
if (is_array($designers)) { 
    $designers_total = count($designers); 
} 

$speakers_total = 0; 
$speakers = get_field('speakers'); 
if (is_array($speakers)) { 
    $speakers_total = count($speakers); 
} 

$staff_total = $instructors_total + $leaders_total + $designers_total + $speakers_total; 

Как уже упоминалось выше, это основано на обоих @ hube2-х рекомендаций за исключением того, Я использую count() в моих is_array() проверках, а не за их пределами. Использование count() для добавления итогов вместе за пределами проверки возвращало «1», даже если массив был пуст. Поэтому, если все мои массивы были пусты, я все еще получал «4». В документе count() указано: «Если параметр не является массивом или не имеет объект с реализованным счетным интерфейсом, то будет возвращен 1».

Возможно, это лучший способ сделать это, но это хорошо работает для меня.

Спасибо за помощь!

1

Вы находитесь на правильном пути, но РНР count принимает только один смешанный объект/массив сразу, так что вы должны пойти с:

if (count($instructors) + count($leaders) + count($designers) + count($speakers) > 1) { 
    // dosomething... 
} 

Или вы можете сохранить результат в переменной в случае, если необходимо повторно использовать его позже в вашем коде:

$count = count($instructors) + count($leaders) + count($designers) + count($speakers); 

if ($count > 1) { 
    // dosomething... 
} 

Надеюсь, это поможет!

+0

Спасибо за ваш ответ. Я попробовал ваше решение, но он, похоже, не работает. Я использовал print_r(), чтобы узнать, какое значение я получаю, и это дает мне количество массивов (4), а не общее количество объектов в 4 массивах. Это очень странно, так как я могу получить правильный номер, если я использую count() для отдельного объекта post. –

+0

Можете ли вы вывести вывод 'print_r' для хотя бы одной из ваших переменных? –

+0

Еще раз спасибо за отзыв! Я смог найти решение для своей проблемы на форуме ACF ... где я также [разместил этот вопрос] (https://support.advancedcustomfields.com/forums/topic/get-total-count-from-mult iple-пост-объектные поля/# пост-37252). Я добавил свое решение в качестве ответа на этой странице. –

Смежные вопросы