PHP存储数据库查询结果到多维数组时出现数组转字符串转换提示
解决数组转字符串转换的Notice问题
这个问题的根源在于你对$res数组的结构理解和遍历方式不匹配,咱们一步步拆解解决:
问题分析
从var_dump($res)的输出能明确看到,$res是一个索引数组,每个元素都是包含PARENT_CAT_CODE和PARENT_CAT_DESC的子数组:
array(4) { [0]=> array(2) { ["PARENT_CAT_CODE"]=> string(3) "100" ["PARENT_CAT_DESC"]=> string(16) "ROUTE COLLECTION" } [1]=> array(2) { ["PARENT_CAT_CODE"]=> string(1) "1" ["PARENT_CAT_DESC"]=> string(5) "SHOES" } [2]=> array(2) { ["PARENT_CAT_CODE"]=> string(1) "4" ["PARENT_CAT_DESC"]=> string(41) "ΑΝΤΑΛΛΑΚΤΙΚΑ ΟΧΗΜΑΤΩΝ" } [3]=> array(2) { ["PARENT_CAT_CODE"]=> string(1) "6" ["PARENT_CAT_DESC"]=> string(10) "ΒΑΦΕΣ" } }
但你在视图里的foreach写法,是把$res当成了键为PARENT_CAT_CODE、值为PARENT_CAT_DESC的关联数组,这就导致遍历的时候$PARENT_CAT_DESC其实是一个子数组——PHP尝试把这个子数组转成字符串输出到<option>里,自然就抛出了Array to string conversion的Notice。
两种解决方案
方案1:修改后端数组构建逻辑(视图代码无需改动)
把原来构建数组的代码,从把整个子数组塞进$res,改成直接将PARENT_CAT_CODE作为键,PARENT_CAT_DESC作为值存入$res:
原代码:
while ( $row = oci_fetch_array($categories_PST) ) { $res[] = $row; }
修改后:
while ( $row = oci_fetch_array($categories_PST) ) { $res[$row['PARENT_CAT_CODE']] = $row['PARENT_CAT_DESC']; }
这样$res就变成了你视图期望的关联数组,原有的视图代码可以正常工作。
方案2:修改视图遍历逻辑(后端数组保持不变)
如果不想改动后端代码,直接调整视图的foreach,遍历每个子数组并取出对应的键值:
原视图代码:
<?php foreach($res as $PARENT_CAT_CODE => $PARENT_CAT_DESC): ?> <option value="<?= $PARENT_CAT_CODE; ?>"><?= $PARENT_CAT_DESC; ?></option> <?php endforeach; ?>
修改后:
<?php foreach($res as $item): ?> <option value="<?= $item['PARENT_CAT_CODE']; ?>"><?= $item['PARENT_CAT_DESC']; ?></option> <?php endforeach; ?>
这里$item就是$res里的每个子数组,直接访问它的PARENT_CAT_CODE和PARENT_CAT_DESC键就能拿到对应的值,不会再触发数组转字符串的错误。
内容的提问来源于stack exchange,提问作者user9402741
相关产品推荐
相关产品推荐

