【问题标题】:Wordpress PHP MySQL query with a multidimensional array带有多维数组的 Wordpress PHP MySQL 查询
【发布时间】:2014-04-08 19:20:42
【问题描述】:

当我在没有 foreach 的情况下在 WordPress 中运行以下 PHP 时,我成功打印了一个多维数组。当我使用foreach 时,它会返回一个error 500,我只是想遍历结果,以便能够选择每个name,然后将其推送到另一个数组。

如果有人可以帮助我遍历这个数组,那就太好了!

Array
(
    [0] => stdClass Object
        (
            [term_taxonomy_id] => 26
            [taxonomy] => product_brand
            [name] => Authentic Cheese 
            [slug] => authentic-cheese
        )

    [1] => stdClass Object
        (
            [term_taxonomy_id] => 27
            [taxonomy] => product_brand
            [name] => Robot
            [slug] => robot
        )

)

PHP

$q2 = "SELECT t.term_taxonomy_id, t.taxonomy, e.name, e.slug
FROM wp_term_taxonomy t
INNER JOIN wp_terms e ON t.term_taxonomy_id = e.term_id
WHERE taxonomy = 'product_brand'";

$r2 = $wpdb->get_results($q2);

print_r($r2);

foreach ($r2 as $row) {
    echo $row['name'];
}

【问题讨论】:

  • 那不是二维数组,是对象数组
  • 这是Object 不是Array...正如@EliasVanOotegem 所说...
  • 请注意,您没有必须将结果集用作对象,您可以将结果作为关联数组的数组获取,也...添加了详细信息+我的答案的链接

标签: php mysql wordpress foreach


【解决方案1】:

结果中有一个对象数组。所以使用:

foreach ($r2 as $row) {
    echo $row->name;
}

【讨论】:

    【解决方案2】:

    您有一个 对象 的一维数组,确切地说是 stdClass 的实例:

    Array
    (
        [0] => stdClass Object //<== stdClass OBJECT!!
    

    这意味着您既可以使用对象,也可以像使用任何对象一样访问名称:

    foreach ($array as $row)
    {
        echo $row->name, PHP_EOL;
    }
    

    或者,如果你真的想要,你可以简单地将对象转换到数组:

    foreach ($array as $k => $o)
    {
        $array[$k] = (array) $o;//cast and re-assign
    }
    

    下一次循环$array 时,对象将消失,而您将获得关联数组...不过,实际上,这个演员业务只是开销,我真的只是使用对象如果我是你。
    当然,如果你可以改变获取模式,你可以改变它,让所有的结果都作为关联数组来获取。

    根据the wordpress documentation,您可以将第二个参数传递给get_results 方法,指定获取方法

    $r2 = $wpd->get_results($q2, ARRAY_A);
    

    将是确保$r2 实际上是关联数组的数组的最佳方式

    引用我所依据的文档:

    可以使用 get_results 从数据库中提取通用的多行结果。该函数将整个查询结果作为一个数组返回,如果没有结果则返回 NULL。该数组的每个元素对应于查询结果的一行,与 get_row 一样,可以是对象、关联数组或编号数组。

    <?php $wpdb->get_results( 'query', output_type ); ?> 
    

    查询
    (字符串)您希望运行的查询。将此参数设置为 null 将返回上一个查询的缓存结果中的数据。

    输出类型
    四个预定义常量之一。默认为对象。有关详细信息,请参阅 SELECT a Row 及其示例。
    OBJECT - 结果将作为行对象的数字索引数组输出。
    OBJECT_K - 结果将作为行对象的关联数组输出,使用第一列的值作为键(重复项将被丢弃)。
    ARRAY_A - 结果将作为关联数组的数字索引数组输出,使用列名作为键。
    ARRAY_N - 结果将作为数字索引数组的数字索引数组输出。

    【讨论】:

      【解决方案3】:

      请注意,您的 print_robjects 数组,而不是数组数组。所以你需要这样做

      foreach ($r2 as $object) {
          echo $object->name;
      }
      

      【讨论】:

        【解决方案4】:

        您可以在 WordPress 中使用wp_list_pluck

        <?php names = wp_list_pluck( $your_array, 'name' ); ?>
        

        【讨论】:

          猜你喜欢
          • 2015-04-30
          • 1970-01-01
          • 1970-01-01
          • 2017-12-18
          • 2017-06-14
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 1970-01-01
          相关资源
          最近更新 更多