2014-09-30 101 views
0

我有这样的如何将索引数组转换为关联数组?

$products = array(array(354),array(1),array(375),array(1),array(344),array(2)); 

一个数组,我想实现这样的

$arrProducts= array(array('product_id'=>354,'qty'=>1),array('product_id'=>375,'qty'=>1),array('product_id'=>344,'qty'=>2)); 

阵列我使用此代码

foreach($products as $val) 
{ 
    $abc[] =$val[0]; 

} 

for($i=0;$i<count($abc);$i++) 
{ 
    if($i%2==0) 
    { 
    $newarr[]['product_id'] = $abc[$i]; 
    } 
    else{ 
    $newarr[]['qty'] = $abc[$i]; 
    } 
} 


for($j=0;$j<count($newarr);$j++) 
{ 
    if($j%2==0) 
    { 
     $arrProducts[] = array_merge($newarr[$j],$newarr[$j+1]); 
    } 
    else{ 
    continue; 
    } 
} 

echo '<pre>'; 
print_r($arrProducts); 

实现这个数组,但我认为我的方式得到这个数组太长,所以我怎么能得到这个数组在短的方式使用一些数组函数,或者我应该使用这个代码?

回答

10

您可以在此情况下,使用array_chunk,如果这是总是三三两两,并与array_combine()结合起来:

$products = array(array(354),array(1),array(375),array(1),array(344),array(2)); 
$products = array_chunk($products, 2); 

$arrProducts = array(); 
$keys = array('product_id', 'qty'); 
foreach($products as $val) { 
    $arrProducts[] = array_combine($keys, array(reset($val[0]), reset($val[1]))); 
} 

echo '<pre>'; 
print_r($arrProducts); 

另一种方法是:

$products = array(array(354),array(1),array(375),array(1),array(344),array(2)); 
$keys = array('product_id', 'qty'); 
$arrProducts = array_map(function($e) use ($keys) { 
    return array_combine($keys, array_map('reset', $e)); 
}, array_chunk($products, 2)); 

这将产生相同的结果。

4

消耗在每次迭代×2个阵列元素:

$arrProducts = array(); 
$inputLength = count($products); 
for ($i = 0; $i < $inputLength; $i += 2) { 
    $arrProducts[] = array('product_id' => $products[$i][0], 'qty' => $products[$i+1][0]); 
} 
+1

这是我想做到这一点。无需过分复杂的事情。 – georg 2014-09-30 07:12:57

1
$i=1; 
$j=0; 
foreach($products as $val) 
{ 
if(($i%2) == 0) 
{  
    $abc[$j]['qty'] =$val[0]; 
    $j++; 
} 
else 
{ 
$abc[$j]['product_id'] =$val[0]; 
} 
$i++; 
} 
相关问题