PHP三维数组遍历求助:根据room_type_id匹配返回check_in_times
处理PHP三维数组的遍历需求
嘿,我来帮你搞定这个三维数组的遍历问题!咱们先捋清楚核心逻辑:遍历给定的三维数组,当某个父级元素的room_type_ids数组包含特定值时,返回该父级元素里check_in_times数组的对应值(看你示例里都是取第一个元素,咱们就按这个逻辑来实现)。
核心思路
- 遍历外层数组的每一个父级元素
- 对每个父级元素,检查它的
room_type_ids子数组是否包含你要找的目标ID - 如果找到匹配项,就返回对应的
check_in_times数组的第一个元素;如果遍历完都没找到,返回默认值(比如null)
实现代码
function getCheckInTimeByRoomTypeId($array, $targetRoomTypeId) { // 遍历外层数组的每个父级元素 foreach ($array as $item) { // 用in_array检查当前元素的room_type_ids是否包含目标值 if (in_array($targetRoomTypeId, $item['room_type_ids'])) { // 返回对应check_in_times的第一个元素(符合你的示例需求) return $item['check_in_times'][0]; } } // 没找到匹配项时返回默认值,你可以改成0或者其他提示内容 return null; } // 你的原始数组(我帮你格式化了一下,看起来更清晰) $myarray = [ [ 'check_in_times' => [1], 'room_type_ids' => [261, 281, 283, 292, 296, 365, 381, 387, 389, 730], 'season_ids' => [0] ], [ 'check_in_times' => [2], 'room_type_ids' => [36, 38, 300, 318, 336, 889, 897, 728, 745, 747], 'season_ids' => [0] ] ]; // 测试你要的场景 echo getCheckInTimeByRoomTypeId($myarray, 261); // 输出:1 echo getCheckInTimeByRoomTypeId($myarray, 36); // 输出:2
代码解释
getCheckInTimeByRoomTypeId函数接收两个参数:你的三维数组,以及要查找的目标room_type_idforeach循环遍历外层的每个父级元素,逐个检查匹配情况in_array()是PHP内置函数,专门用来快速检查某个值是否存在于数组中- 一旦找到匹配的元素,立刻返回对应的
check_in_times[0],这样不用遍历完所有元素,效率更高 - 如果遍历结束都没找到匹配项,函数返回
null,你可以根据自己的需求改成其他默认值(比如0或者字符串'未找到匹配项')
扩展场景:如果有多个匹配项怎么办?
要是你的数组里有多个父级元素都包含同一个room_type_id,想要收集所有对应的check_in_times,可以用下面这个版本的函数:
function getAllCheckInTimesByRoomTypeId($array, $targetRoomTypeId) { $results = []; foreach ($array as $item) { if (in_array($targetRoomTypeId, $item['room_type_ids'])) { $results[] = $item['check_in_times'][0]; } } return $results; } // 调用示例(假设你后来加了包含261的元素) print_r(getAllCheckInTimesByRoomTypeId($myarray, 261)); // 输出:Array ( [0] => 1 )
内容的提问来源于stack exchange,提问作者Costa
相关产品推荐
相关产品推荐

