【问题标题】:"IF" condition to compare two arrays in PHP在 PHP 中比较两个数组的“IF”条件
【发布时间】:2019-12-19 09:55:49
【问题描述】:

我有两个数组

$array1 = array(25) {
  ["ID"]=>
  int(508)
  ["label"]=>
  string(8) "Document"
  ["value"]=>
  array(1) {
    [0]=>
    object(WP_Term)#11926 (10) {
      ["term_id"]=>
      int(25)
      ["name"]=>
      string(6) "note 1"
      ["slug"]=>
      string(6) "note-1"
             }
           }
  ["menu_order"]=>
  int(0)
...
}

$array2 = array(25) {
  ["ID"]=>
  int(526)
  ["label"]=>
  string(10) "Document 2"
  ["value"]=>
  array(2) {
    [0]=>
    array(2) {
      ["value"]=>
      string(5) "#link"
      ["label"]=>
      string(4) "link"
    }
    [1]=>
    array(2) {
      ["value"]=>
      string(5) "#link"
      ["label"]=>
      string(4) "link"
    }
  }
...
}

我想创建一个 IF 条件 - 如果数组包含“object (WP_Term)”然后打印“正确”。

我正在尝试使用 in_array() 函数,但没有得到结果而不是存在。 in_array() 函数适用于对象数组? :

if(in_array('object', $array1)) {
print 'correct';}

如果不是,那么检查数组是否包含对象数组的替代方法是什么。 不幸的是,它不起作用。请帮我创造条件。谢谢

【问题讨论】:

  • 请添加比“不起作用”更多的细节:它总是“正确”吗?绝不?是否有错误(如果有,请将其添加到问题中)?同样重要的是要注意您的“对象(WP_Term)”不在您的数组中,它在您的数组中的一个数组中。这很重要,你的方法必须更微妙,我们可能需要更多细节:总是这样吗?可以嵌套更深的层次吗?
  • 如果可能,请张贴您的完整支票以帮助您做得更好!

标签: php arrays object if-statement conditional-statements


【解决方案1】:

如果类 'WP_Term' 的实例不在某个级别,则必须递归搜索数组。这可以通过array_walk_recursive 完成。我创建了这个函数:

//return true if arr contains an object with className
function arrayContainObject(array $arr, $className){
  $contain = false;
  array_walk_recursive($arr,function($val,$key) use($className, &$contain){
    if($val instanceOf $className) $contain = true;
  });
  return $contain;
}

函数使用示例:

//Test Data
class WPterm{}

$arr = [1,2,3,
  [4,5, (new WPTerm)]
];

//check
if( arrayContainObject($arr, 'WPTerm')){
  echo "Array contain object WPterm";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多