Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从stdClass对象中提取值_Php_Arrays_Object - Fatal编程技术网

Php 从stdClass对象中提取值

Php 从stdClass对象中提取值,php,arrays,object,Php,Arrays,Object,变量$results上的我的var\u dump显示如下内容 array (size=11) 0 => object(stdClass)[69] public 'Tables_in_database-name-here' => string 'wp_commentmeta' (length=14) 1 => object(stdClass)[68] public 'Tables_in_database-name-here' =

变量
$results
上的我的
var\u dump
显示如下内容

array (size=11)
  0 => 
    object(stdClass)[69]
      public 'Tables_in_database-name-here' => string 'wp_commentmeta' (length=14)
  1 => 
    object(stdClass)[68]
      public 'Tables_in_database-name-here' => string 'wp_comments' (length=11)
  2 => 
    object(stdClass)[67]
      public 'Tables_in_database-name-here' => string 'wp_links' (length=8)

  ...

  10 => 
    object(stdClass)[59]
      public 'Tables_in_database-name-here' => string 'wp_users' (length=8)
我希望能够从上述结构中提取表名,并以逗号分隔的形式列出它们,如下所示:

 `wp_commentmeta,wp_comments,wp_links....,wp_users`
但是,我的大脑冻结了,无法从这个结构中提取数据

我尝试了很多选项,因为您可以通过下面的代码进行跟踪-每个选项都以一个错误结束

    foreach ($results as $current_item):
        /*
         * $current_item is something like this:
         * 
         * object(stdClass)[69]
            public 'Tables_in_database-name-here' => string 'wp_commentmeta' (length=14)
         */

        # echo $current_item;      
        # fires an error as "Catchable fatal error: Object of class stdClass could not be converted to string"

        # echo $current_item[1]; 
        # fires an error as "Cannot use object of type stdClass as array in..."

        # echo array_values($current_item); 
        # fires an error as "array_values() expects parameter 1 to be array, object given in .."

        # echo $current_item['Tables_in_database-name-here']; 
        #fires an error as "Cannot use object of type stdClass as array in "

        how do you get that darn thing? :)

    endforeach; 

您的主要问题是database-name-here中的属性名称
Tables\u,它不能通过通常的
$obj->propertyName
方式表示。PHP允许您通过
$obj->{'invalid-variable-name-but-ok-as-a-property'}
使用字符串属性名

我只需通过
内爆()
数组映射()
构造字符串

$string = implode(',', array_map(function($result) {
    return $result->{'Tables_in_database-name-here'};
}, $results));
演示~

关于属性名,还可以将
stdclass
对象强制转换为数组。例如

$associativeArray = (array) $result;
// array(1) { ["Tables_in_database-name-here"] => string(14) "wp_commentmeta" }

$indexedArray = array_values($associativeArray);
// array(1) { [0] => string(14) "wp_commentmeta" }

谢谢你的代码。。我现在明白了。。有没有办法避免在代码中使用硬编码的“Tables_in_database-name-here”——通过数字索引或类似的方式引用它?我想避免使用那个特定的键的原因是,这应该是一个库函数…@AverageJoe我已经在我的答案中添加了更多的信息