このバージョンには@PHPglue answerと同じ結果がある可能性があります。しかし、これは1つだけforeach
がかかります。私はこれがトップSOユーザーの1人によってここに述べられているように、これがより高速で効率的な方法だと思います。
あなたがそれを望むならば見てみてください。テストのための
Live Demo
<?php
function explodeArray($arr)
{
$newArr = array();
foreach($arr as $row)
{
$key = array_keys($row)[0];
$curArr = count($newArr) > 0 ? $newArr[count($newArr)-1] : array();
if(array_key_exists($key, $curArr))
{
array_push($newArr, array($key=>$row[$key]));
}
else
{
$index = count($newArr) > 0 ? count($newArr) - 1 : 0 ;
$newArr[$index][$key] = $row[$key];
}
}
return $newArr;
}
異なるアレイ。
$detail = array(
array('id'=>'item1'),
array('price'=>300),
array('quantity'=>1),
array('id'=>'item2'),
array('price'=>400),
array('quantity'=>2)
);
var_dump(explodeArray($detail));
$detail_match = array(
array('id'=>'item1'),
array('price'=>300),
array('quantity'=>1),
array('newkey'=>'sample'),
array('id'=>'item2'),
array('price'=>400),
array('quantity'=>2),
array('newkey'=>'sample')
);
var_dump(explodeArray($detail_match)); // Works with any size of keys.
$detail_diff_key = array(
array('id'=>'item1'),
array('price'=>300),
array('quantity'=>1),
array('diff1'=>'sample1'),
array('id'=>'item2'),
array('price'=>400),
array('quantity'=>2),
array('diff2'=>'sample2')
);
var_dump(explodeArray($detail_diff_key)); // Works with any size of keys and different keys.
$detail_unmatch = array(
array('id'=>'item1'),
array('price'=>300),
array('quantity'=>1),
array('unmatchnum'=>'sample1'),
array('id'=>'item2'),
array('price'=>400),
array('quantity'=>2)
);
var_dump(explodeArray($detail_unmatch));
むしろそれが今して後で修正するためのより多くのコードを記述しようとしているようにそれを作るよりも、ソースでそれを正しく作りますそれ。この配列をどのように生成しますか? –
ソースを制御できない場合は、最初の配列を手動で反復する必要があります.1つのアイテムの3つのコンポーネントすべてを「収集」するたびに、それらを押し込むことができます。しかし、これはエラーが発生しやすいと感じています。 – Scuzzy
私は他のサーバーから最初の配列を得ました。私はソースに入れません – Vinsens