【问题标题】:Comparing two stdClass Objects比较两个 stdClass 对象
【发布时间】:2012-08-17 17:04:30
【问题描述】:

我目前正在 Wordpress 主题中进行修改后的搜索,该主题查询自定义分类法 location 并将其术语显示为搜索结果。我找不到内置的 Wordpress 函数来处理这个问题,所以我使用了 $wpdb query

$keywords = $_GET['s'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->terms WHERE name LIKE '%%$keywords%%'");

<ul>
<?php foreach ( $results as $result ) :?>
   <li><?php echo $result->name;?></li>
<?php endforeach;?>
</ul>

问题在于表wp_terms 不仅存储自定义分类术语,还存储其他默认术语。因此,为了仅显示自定义分类法的搜索结果,而不是其他默认术语,我想使用get_terms 来获取属于自定义分类法location 的所有术语,并显示基于表wp_terms 的术语关闭get_terms 结果与in_array

$keywords = $_GET['s'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->terms WHERE name LIKE '%%$keywords%%'");

$terms = get_terms("location");

<ul>
<?php foreach ( $results as $result ) :?>
  if(in_array($result->name, $terms)) :?>
     <li><?php echo $result->name;?></li>
  <?php endif;?>
<?php endforeach;?>
</ul>

但是,$results 和 $terms 都是 stdClass 对象,所以 in_array 不起作用。

是否有函数、方法或可能的 MySQL 查询允许我根据对象 $terms 的内容显示来自对象 $results 的结果?

提前致谢。

编辑: $terms的内容

Array ( 
  [0] => stdClass Object ( [term_id] => 32 [name] => US [slug] => us [term_group] => 0 [term_taxonomy_id] => 32 [taxonomy] => signs [description] => [parent] => 25 [count] => 1 ) 
  [1] => stdClass Object ( [term_id] => 22 [name] => EU [slug] => eu [term_group] => 0 [term_taxonomy_id] => 22 [taxonomy] => signs [description] => [parent]  => 0 [count] => 3 ) 
  [2] => stdClass Object ( [term_id] => 26 [name] => AU [slug] => au [term_group] => 0 [term_taxonomy_id] => 26 [taxonomy] => signs [description] => [parent] => 22 [count] => 1 ) 
  [3] => stdClass Object ( [term_id] => 27 [name] => IE [slug] => ie [term_group] => 0 [term_taxonomy_id] => 27 [taxonomy] => signs [description] => [parent] => 22 [count] => 2 ) 
  [4] => stdClass Object ( [term_id] => 23 [name] => PK [slug] => pk [term_group] => 0 [term_taxonomy_id] => 23 [taxonomy] => signs [description] => [parent] => 0 [count] => 2 ) 
)

【问题讨论】:

标签: php mysql wordpress search taxonomy


【解决方案1】:

你可以将它们转换成数组

(array) $variable;

或者,如果您的 stdClass 包含嵌套的 stdClass,您可以执行以下操作:

function obj_to_array_recursive(stdClass $obj) {
    foreach ($obj as &$element) {
        if ($element instanceof stdClass) {
            obj_to_array_recursive($element);
            $element = (array)$element;
        }
    }
    $obj = (array)$obj;
    return $obj;
}

【讨论】:

  • 感谢您的帮助,我用obj_to_array_recursive($terms); 调用了该函数并得到了Fatal error: Call to undefined function obj_to_array_recursive()。不确定我是否正确调用它,有什么建议吗?
  • @dcd018:你在使用之前定义了函数吗?不是PHP原生函数,是我写的函数……
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2014-01-26
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多