我已经符合PHP代码,它给出了数组到字符串的转换错误,创建了类别和子类别树节点,但在编译时发生了错误,让我解释一下我在哪里得到错误。
<?php
$conn = mysqli_connect('localhost','res_user','Res@123','res_db');
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = " SELECT * , category.id AS catId FROM category INNER JOIN sub_category ON category.id = sub_category.category_id
ORDER BY category.id, sub_category.category_id";
$res = mysqli_query($conn, $sql);
$categoryArray = array();
$oldCatId = 0;
while ($row = mysqli_fetch_assoc($res)) {
if ($row['catId'] != $oldCatId) {
$categoryArray[$row['catId']] = array(
'success' => true,
'category_' . $row['catId'] = array(
'cat_id' => $row["catId"],
'cat_name' => $row['cat_name'],
'cat_img' => $row['cat_img'],
'sub_category' => array(
'sub_id' => $row['category_id'],
'sub_name' => $row['sub_name']
)
)
);
$oldCatId = $row['catId'];
} else {
$categoryArray[$row['catId']]['category_' . $row['catId']]['sub_category'][] = array(
'sub_id' => $row['category_id'],
'sub_name' => $row['sub_name']
);
}
}
echo $categoryArray;
?>
你不能回显数组,因为它要输出一个或多个字符串,你需要print_r或var_dump它,如:
print_r($categoryArray);
错误消息的原因是代码尝试显示带有回显的数组。此构造仅用于显示字符串,而不是数组。 只要你给 PHP 提供一个标量值(布尔值、整数、字符串、浮点数),如果标量的数据类型不是字符串,PHP 会暂时将其提升为字符串。
通常,您需要遍历数组以显示其元素的任何标量值,从而编写某种循环结构。 PHP 为使用多维数组提供了极大的便利,函数 array_walk_recursive() 与回调一起使用。 这是问题中提到的数组的变体,让您了解如何将 array_walk_recursive() 与回调一起使用。 现在 PHP 支持匿名函数,我们可以使用一个用于回调,如下所示:
<?php
$categoryArray[0]['category_0']['sub_category'][] = array(
'sub_id' => 500,
'sub_name' => '1a'
);
array_walk_recursive($categoryArray,
function($value,$key){
echo "$key: $valuen";
});
// output:
sub_id: 500
sub_name: 1a
array_walk_recursive() 的优点在于它将遍历一个多维数组,并且回调显示任何可用数据。请注意,回调需要按特定顺序排列其参数,第一个参数必须对应于元素的值,而第二个参数必须表示其键。
另请参阅此处的现场演示。