在我的数据挖掘项目中,我得到了一个复杂的、巨大的多维数组,其中包含我需要的所有信息,除了我必须在处理它之前对其执行“修复”。我已经编写了一些代码来解决这个问题,但是对于我必须“修复”的大量数据来说,它花费的时间太长了,我希望有人可以帮助我找到更有效的解决方案。
本质上,我正在使用的数组类型首先由整数索引,就像任何普通数组一样,即$x[0], $x[1], $x[2]
,除了每个元素都是包含我需要的键对值的关联数组(例如$x[0]['item'], $x[0]['price']
),但是其中一个键存储得更深一些,即 ID。
ID 号存在于数组中$x[0]['@attributes']['id']
,我想通过复制此信息以及其他密钥对来简化结构,例如$x[0]['id']
.
我正在使用的数据集很大,但这是我的情况的简化示例:
$attrib1 = array('id'=>'101');
$item1 = array('@attributes'=>$attrib1, 'item'=>'milk', 'price'=>'3.50');
$attrib2 = array('id'=>'102');
$item2 = array('@attributes'=>$attrib2, 'item'=>'butter', 'price'=>'2.45');
$attrib3 = array('id'=>'103');
$item3 = array('@attributes'=>$attrib3, 'item'=>'bread', 'price'=>'1.19');
$items = array($item1, $item2, $item3);
echo "Starting data - items using itemid as attribute:\n";
print_r($items);
# set item numbers by key instead of attribute
$i=0;
while(isset($items[$i]['@attributes']['id'])) {
$items[$i]['itemid'] = $items[$i]['@attributes']['id'];
#unset($items[$i]['@attributes']);
$i++;
} # while
echo "\nDesired result - items using itemid as key:\n";
print_r($items);
以下是上述示例的输出:
Starting data - items using itemid as attribute:
Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => 101
)
[item] => milk
[price] => 3.50
)
[1] => Array
(
[@attributes] => Array
(
[id] => 102
)
[item] => butter
[price] => 2.45
)
[2] => Array
(
[@attributes] => Array
(
[id] => 103
)
[item] => bread
[price] => 1.19
)
)
Desired result - items using itemid as key:
Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => 101
)
[item] => milk
[price] => 3.50
[itemid] => 101
)
[1] => Array
(
[@attributes] => Array
(
[id] => 102
)
[item] => butter
[price] => 2.45
[itemid] => 102
)
[2] => Array
(
[@attributes] => Array
(
[id] => 103
)
[item] => bread
[price] => 1.19
[itemid] => 103
)
)
请注意在所需结果中添加的 [itemid] 键值对。有没有更快/更优雅的方式来实现这一点?我已经查看了 PHP 的一些花哨的数组函数,但我无法绕过这种更复杂的情况来使用它们。有任何想法吗?