从多个帖子对象字段中获取总数

时间:2016-04-15 21:51:08

标签: php object post advanced-custom-fields

我对PHP很陌生,所以我的问题可能有一个非常简单的答案,但我搜索了ACF论坛和谷歌没有运气。希望有人可以提供帮助。

我的页面上有四个多选择的帖子对象字段,我试图获得这些帖子对象中的帖子总数(或者在我的情况下是人员)。我想以某种方式将它们组合在一起,这样我就可以使用有条件的总数。

我可以使用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%确定post对象的输出是一个数组......虽然它在我使用时看起来像它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...
}

当我这样做时,我收到一个错误:“致命错误:......中不支持的操作数类型。”。

希望有人可以为我解答这个问题,或者至少指出正确的方向。 提前致谢。非常感谢!

2 个答案:

答案 0 :(得分:1)

您已经走上了良好的轨道,但PHP 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...
}

希望它有所帮助!

答案 1 :(得分:0)

这是最终为我工作的解决方案:
(根据John Huebner在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()验证之外。在验证之外使用document.getElementByClassName('myClassName').style.color = "red"; 将总数添加到一起,返回了' 1'即使阵列是空的。因此,如果我的所有阵列都是空的,我仍然会得到#4;'。 count() doc指出:"如果参数不是数组,或者不是具有已实现Countable接口的对象,则返回1。"

可能有更好的方法可以做到这一点,但这对我来说效果很好。

感谢您的帮助!