PHP:将键值对数组转换为含stdClass对象的索引数组
PHP关联数组转对象数组的实现方案
嗨,这事儿其实挺简单的,咱们直接针对你的$array1结构来转换就行,给你几种实用的实现方式,都能生成符合要求的$array2:
首先先明确原数组的定义(方便你直接测试):
$array1 = [ 2 => 2, 60 => 2, 12 => 1, 61 => 1, 9 => 1, 14 => 1 ];
方法一:基础foreach遍历(最直观,易理解)
这种方法适配所有PHP版本,逻辑清晰,新手也能快速看懂:
$array2 = []; // 遍历原数组,键对应目标对象的id,值对应count foreach ($array1 as $id => $count) { // 新建stdClass对象并赋值 $item = new stdClass(); $item->id = $id; $item->count = $count; // 将对象追加到新数组末尾 $array2[] = $item; }
方法二:用array_map简化代码(代码更紧凑)
利用array_map函数同时处理原数组的值和键(通过array_keys获取所有id),省去手动循环的冗余代码:
$array2 = array_map(function($count, $id) { $item = new stdClass(); $item->id = $id; $item->count = $count; return $item; }, $array1, array_keys($array1));
方法三:PHP 7.4+ 极简写法(短箭头函数+强制类型转换)
如果你用的是PHP 7.4及以上版本,可以用短箭头函数+数组转对象的强制类型转换,一行搞定:
$array2 = array_map(fn($count, $id) => (object)['id' => $id, 'count' => $count], $array1, array_keys($array1));
验证结果
执行完任意一种方法后,用print_r($array2)输出,就能得到你想要的结构:
Array ( [0] => stdClass Object ( [id] => 2 [count] => 2 ) [1] => stdClass Object ( [id] => 60 [count] => 2 ) ... // 后续对象依次对应原数组的键值对 )
内容的提问来源于stack exchange,提问作者user779681
相关产品推荐
相关产品推荐

