【问题标题】:object to array对象到数组
【发布时间】:2025-11-25 12:05:01
【问题描述】:

我需要将对象 $resultInput 视为一个数组(如 $resultInput 已注释掉)。但是,当我使用函数对象进行数组时,我得到一个错误 Resource id #5。有什么问题?

require('dbc.php');

mysql_select_db($db);
$resultInput = mysql_query("SHOW COLUMNS FROM about WHERE Field NOT IN ('id', 'created', 'date_modified', 'last_modified', 'update', 'type', 'bodytext') AND Field NOT REGEXP '_image'"); // selects only the columns I want

//$resultInput = array('page_header', 'sub_header', 'content', 'content_short');

function objectToArray($object){
    if(!is_object($object) && !is_array($object)){
        return $object;
    }
    if(is_object($object)){
        $object = get_object_vars( $object );
    }
    return array_map( 'objectToArray', $object );
}

// convert object to array
$array = objectToArray( $resultInput );

//show the array
print_r( $array );

【问题讨论】:

标签: php mysql arrays object


【解决方案1】:

您收到此错误是因为mysql_query() 返回的是资源,而不是对象。要获取对象,您需要使用 mysql 函数之一将行集检索为对象(即mysql_fetch_object())。但是,您不需要 objectToArray 函数,因为您可以使用 mysql_fetch_array 将行集作为数组获取,如下所示:

$result = mysql_query("...");
$resultInput = mysql_fetch_array( $result);

另外,我相信有人会对使用现已弃用的 mysql 函数发表评论。但是,为了彻底起见,您应该考虑使用mysqliPDO

所以你得到了这个作为输出:

array(12) {
    [0] = > string(11)"page_header"
      ["Field"] = > string(11)"page_header" 
    [1] = > string(11)"varchar(50)" 
      ["Type"] = > string(11)"varchar(50)" 
    [2] = > string(3)"YES" 
      ["Null"] = > string(3)"YES" 
    [3] = > string(0)"" 
      ["Key"] = > string(0)"" 
    [4] = > NULL
      ["Default"] = > NULL
    [5] = > string(0)"" 
      ["Extra"] = > string(0)""
}

其中描述了page_header 列。要仅显示所有列的列名,您可以:

$result = mysql_query("..."); $columns = array();
while( $row = mysql_fetch_array( $result) {
    $columns[] = $row['Field'];
}

var_dump( $columns);

【讨论】:

  • 我不想获取行集,我想从中获取 SHOW COLUMNS 中定义的列名。我意识到是 mysql_fetch_assoc
  • ... 列名将在行集中返回。做var_dump( $resultInput);,你会看到他们...
  • 有趣...请原谅我是新手。但是如何将列名放入数组而不是这样:array(12) { [0]=> string(11) "page_header" ["Field"]=> string(11) "page_header" [ 1]=> string(11) "varchar(50)" ["Type"]=> string(11) "varchar(50)" [2]=> string(3) "YES" ["Null"]=> string(3) "YES" [3]=> string(0) "" ["Key"]=> string(0) "" [4]=> NULL ["Default"]=> NULL [5]=> string(0) "" ["Extra"]=> string(0) "" } 我不需要所有这些 varchar 和密钥信息
【解决方案2】:

在您的代码中,您没有从 MySQL 服务器返回结果。为此,您需要将 mysql_query 结果传递给 mysql_fetch_* 函数。

供您使用,您可以做mysql_fetch_assoc($result);,它将保留列/值关联。

现在,如果您使用MySQLi 并拥有mysqli_fetch_object(),则可以使用以下命令将对象转换为数组,反之亦然。

您可以执行以下操作:

类型转换:

$array = new array();
$object = (object) $array;

$object = new stdClass();
$array = (array) $object;

【讨论】: