PHP中如何对mysqli_fetch_array返回的二维数组进行切片?
处理mysqli_fetch_array返回数组的切片问题
嘿,作为PHP新手遇到这种数组处理问题太正常了,我来帮你一步步搞定~
首先先帮你理清楚你拿到的数组结构:mysqli_fetch_array()默认会返回同时包含数字索引键和字段名关联键的混合数组(因为默认参数是MYSQLI_BOTH),所以每个子元素里既有[0]、[1]这种数字键,又有dt_id、dt_time这种字段名键,这是完全正常的。如果之后你只想拿纯关联数组,可以改用mysqli_fetch_assoc(),不过这并不影响咱们的切片操作。
核心方法:用array_slice()切外层数组
PHP自带的array_slice()函数就是专门用来截取数组片段的,直接用它处理你拿到的外层二维数组就行,举几个常用场景的例子:
假设你的原始数组已经存在$timeSlots变量里(如果是从数据库循环读取的,记得先把所有结果存到数组里,代码我后面会补):
$timeSlots = [ ['0' => 1, 'dt_id' => 1, '1' => '09:00 AM', 'dt_time' => '09:00 AM'], ['0' => 2, 'dt_id' => 2, '1' => '09:15 AM', 'dt_time' => '09:15 AM'], ['0' => 3, 'dt_id' => 3, '1' => '09:30 AM', 'dt_time' => '09:30 AM'], ['0' => 4, 'dt_id' => 4, '1' => '09:45 AM', 'dt_time' => '09:45 AM'], ['0' => 5, 'dt_id' => 5, '1' => '10:00 AM', 'dt_time' => '10:00 AM'], ];
场景1:取前3个时间段
$slicedArray = array_slice($timeSlots, 0, 3); // 结果会包含索引0、1、2的三个子数组
场景2:从第2个时间段(索引1)开始取3个
$slicedArray = array_slice($timeSlots, 1, 3); // 结果包含索引1、2、3的三个子数组
场景3:切片后只保留关联键(去掉数字索引)
如果你觉得子数组里的数字键多余,想切片后只保留dt_id和dt_time,可以结合array_map()和array_intersect_key()来清理:
// 定义你想保留的字段键 $wantedKeys = ['dt_id', 'dt_time']; // 先切片外层数组,再逐个清理子数组 $slicedAndCleaned = array_map(function($item) use ($wantedKeys) { return array_intersect_key($item, array_flip($wantedKeys)); }, array_slice($timeSlots, 0, 3));
处理后每个子数组就只有dt_id和dt_time两个键,看起来更整洁。
补充:从数据库读取时先存完整数组
如果你的数组是通过循环mysqli_fetch_array()得到的,记得先把所有结果一次性存入数组再切片,避免边读边处理的麻烦:
// 假设$conn是你的数据库连接,$result是查询结果集 $timeSlots = []; while ($row = mysqli_fetch_array($result)) { $timeSlots[] = $row; } // 现在对完整的$timeSlots做切片操作 $slicedArray = array_slice($timeSlots, 0, 5);
内容的提问来源于stack exchange,提问作者Kiran Singh
相关产品推荐
相关产品推荐

