如何将索引数组转换为关联数组?

时间:2014-09-30 07:05:41

标签: php arrays

我有一个类似的数组

$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);

但是我认为我获取这个数组的方法太长了所以如何使用某些数组函数以简短的方式获取这个数组?或者我应该使用这个代码吗?

3 个答案:

答案 0 :(得分: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));

这将产生相同的结果。

答案 1 :(得分:4)

每次迭代都要消耗两个数组元素:

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

答案 2 :(得分: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++;
}