所以,我有一个阵列,由于无关的原因,本身就有一个内爆场。现在,我有兴趣在该字段中爆炸字符串,并用爆炸的结果替换该字段。我有点在这里有一个有效的解决方案,但它看起来很笨重,而且我对更高效的东西感兴趣。或者至少在美学上令人愉悦。
示例数组:
$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
数组和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";
答案 0 :(得分:1)
关联数组通常不应该依赖于顺序。我会考虑修改后面的代码直接索引数组并放弃循环。
答案 1 :(得分:0)
试试这个:
$items = array( 'name' => 'shirt', 'kind' => 'blue|long|L', 'price' => 10, 'amount' => 5);
list($items['color'], $items['lenght'], $items['size'])=explode("|",$items['kind']);
unset $items['kind'];
我没有对它进行测试,但它应该有效。
答案 2 :(得分:0)
关联数组没有订单,因此您可以取消设置不再需要的键,然后只需将新值分配给新键。
答案 3 :(得分:0)
单程
$items = array(
'name' => 'shirt',
'kind' => 'blue|long|L',
'price' => 10,
'amount' => 5);
$attribs = array('color', 'lenght', 'size');
$temp = explode("|", $items['kind']);
$s = array_combine($attribs,$temp);
unset($items["kind"]);
print_r( array_merge( $items, $s) );
答案 4 :(得分:0)
这应该保留排序,因为它将键和值分成两个数字排序的数组,并在最后组合它们。它不是更有效,但代码更容易阅读。
$kind_keys = array('color', 'length', 'size');
$kind_values = explode("|", $items['kind']);
$keys = array_keys($items);
$values = array_values($items);
$index = array_search('kind', $keys);
// Put the new keys/values in:
array_splice($keys, $index, 1, $kind_keys);
array_splice($values, $index, 1, $kind_values);
// combine the result into a new array:
$result = array_combine($keys, $values));