PHP如何将数组子元素的索引1值作为键、索引0值作为对应值?
PHP数组转换:将子数组元素反转作为键值对
嘿,我来帮你搞定这个数组转换的问题!你的需求很明确:把原数组里每个子数组的第二个元素(索引1)转成整数作为新数组的键,第一个元素(索引0)作为对应的值。你之前尝试用array_values和array_combine没成功,大概率是因为没正确提取出要作为键和值的两个独立数组,下面给你几种可行的实现方法:
方法一:foreach循环(最直观易懂)
这是最适合新手的写法,逻辑清晰一目了然:
$arrayIn = [ [ 0 => "3", 1 => "12345" ], [ 0 => "2", 1 => "123" ] ]; $arrayOut = []; foreach ($arrayIn as $item) { // 把索引1的字符串值转成整数作为键,索引0的值作为对应值 $arrayOut[(int)$item[1]] = $item[0]; } print_r($arrayOut); // 输出:Array ( [12345] => 3 [123] => 2 )
方法二:array_reduce函数(函数式写法)
如果喜欢更简洁的函数式编程风格,可以用array_reduce来迭代构建新数组:
$arrayIn = [ [ 0 => "3", 1 => "12345" ], [ 0 => "2", 1 => "123" ] ]; $arrayOut = array_reduce($arrayIn, function($carry, $item) { $carry[(int)$item[1]] = $item[0]; return $carry; }, []); print_r($arrayOut); // 输出结果和上面一致
方法三:array_map + array_combine(你的思路优化版)
既然你想用array_combine,那我们只需要先分别提取出键数组和值数组,再组合起来就行:
$arrayIn = [ [ 0 => "3", 1 => "12345" ], [ 0 => "2", 1 => "123" ] ]; // 提取要作为键的数组:每个子数组的索引1值,转成整数 $keys = array_map(function($item) { return (int)$item[1]; }, $arrayIn); // 提取要作为值的数组:每个子数组的索引0值 $values = array_map(function($item) { return $item[0]; }, $arrayIn); // 用array_combine组合键和值 $arrayOut = array_combine($keys, $values); print_r($arrayOut); // 输出同样符合预期
这三种方法都能完美得到你想要的$arrayOut,你可以根据自己的代码风格选择合适的写法~
内容的提问来源于stack exchange,提问作者kales
相关产品推荐
相关产品推荐

