PHP中如何将指定结构的数组转换为多个一维关联数组?
PHP数组转一维关联数组的实现方法
需求是将结构为“每个键对应一个数组”的二维数组,转换为多个包含对应索引键值对的一维关联数组。以下是几种可行的实现方式:
方法一:基础循环实现
这种方式逻辑直观,适合理解底层原理:
// 定义原数组 $originalArray = [ 'cuisineId' => [1, 2], 'dishId' => [90, 525], 'quantity' => [1, 2], 'price' => [200, 440] ]; $result = []; // 获取子数组的长度(假设所有子数组长度一致) $itemCount = count($originalArray['cuisineId']); // 循环每个索引位置,组装一维数组 for ($i = 0; $i < $itemCount; $i++) { $result[] = [ 'cuisineId' => $originalArray['cuisineId'][$i], 'dishId' => $originalArray['dishId'][$i], 'quantity' => $originalArray['quantity'][$i], 'price' => $originalArray['price'][$i] ]; } // 输出转换后的结果 print_r($result);
方法二:用array_map简化代码
如果原数组的键固定,可利用array_map函数实现更简洁的写法:
$originalArray = [ 'cuisineId' => [1, 2], 'dishId' => [90, 525], 'quantity' => [1, 2], 'price' => [200, 440] ]; // 展开原数组的子数组作为array_map的参数,回调函数组装一维数组 $result = array_map(function(...$values) { return [ 'cuisineId' => $values[0], 'dishId' => $values[1], 'quantity' => $values[2], 'price' => $values[3] ]; }, ...array_values($originalArray)); print_r($result);
方法三:通用化实现(适配任意键数量)
如果原数组的键可能变动,或者需要兼容更多键的场景,可使用通用化的循环方式:
$originalArray = [ 'cuisineId' => [1, 2], 'dishId' => [90, 525], 'quantity' => [1, 2], 'price' => [200, 440] ]; $result = []; // 获取原数组的所有键名 $keys = array_keys($originalArray); // 获取子数组长度 $itemCount = count($originalArray[$keys[0]]); for ($i = 0; $i < $itemCount; $i++) { $currentItem = []; // 遍历每个键,组装当前索引的键值对 foreach ($keys as $key) { $currentItem[$key] = $originalArray[$key][$i]; } $result[] = $currentItem; } print_r($result);
以上三种方式都能得到目标格式的一维关联数组,可根据实际场景选择合适的实现。
内容的提问来源于stack exchange,提问作者Mohammed Sunasra
相关产品推荐
相关产品推荐

