したがって、無関係な理由で、それ自体に内破されたフィールドが 1 つある配列があります。今、私はそのフィールドの文字列を爆発させ、そのフィールドを爆発の結果に置き換えることに興味があります。私はちょっとした解決策をここに持っていますが、それは不格好に見え、もっと効率的なものに興味があります. または、少なくとも審美的に満足しています。
配列の例:
$items = array(
'name' => 'shirt',
'kind' => 'blue|long|L',
'price' => 10,
'amount' => 5);
そして目標は、'kind'
フィールドを'color', 'lenght', 'size'
フィールドに置き換えることです。
これまでのところ、私は持っています:
$attribs = array('color', 'lenght', 'size'); // future indices
$temp = explode("|", $items['kind']); // exploding the field
foreach ($items as $key => $value) { // iterating through old array
if ($key == 'kind') {
foreach ($temp as $k => $v) { // iterating through exploded array
$new_items[$attribs[$k]] = $v; // assigning new array, exploded values
}
}
else $new_items[$key] = $value; // assigning new array, untouched values
}
これは(私は暗記していて、自分のコードにアクセスできず、今書いたものを確認できません...エラーがある場合は謝罪します)結果は新しい配列になります。それは次のようになります。
$new_items = array(
'name' => 'shirt',
'color' => 'blue',
'lenght' => 'long',
'size' => 'L',
'price' => 10,
'amount' => 5);
$items
たとえば、これらの値を配列 andに追加することもできますが、unset($items['kind'])
それでは順序が狂ってしまい、後続のforeach
ループで必要になります。
それで、それを行うより簡単な方法はありますか?
編集: (Visage と Ignacio に返信 - 返信がコードを混乱させるため) foreach ループで呼び出すと、特定の順序で呼び出されます。単に追加すると、表の表示に必要な順序が台無しになります。初期データを取得する方法に依存する表示コードを複雑にする必要があります。現在、(または同等の)データを表示しています:
foreach($new_items as $v) echo "<td>$v</td>\n";
追加するだけなら、次のようにする必要があります。
echo "<td>$new_items['name']</td>\n";
foreach ($attribs as $v) echo "<td>$new_items[$v]</td>\n";
echo "<td>$new_items['price']</td>\n";
echo "<td>$new_items['amount']</td>\n";