【发布时间】:2012-10-25 21:28:05
【问题描述】:
在我的数据挖掘项目中,我得到了一个复杂的、巨大的多维数组,其中包含我需要的所有信息,除了我必须在处理它之前对其执行“修复”。我已经编写了一些代码来解决这个问题,但是对于我必须“修复”的大量数据来说,它花费了 方式 太长了,我希望有人可以帮助我找到一个更有效的解决方案。
基本上,我正在使用的数组类型首先由一个整数索引,就像任何普通数组一样,即$x[0], $x[1], $x[2],除了每个元素都是一个关联数组,其中包含 key-我需要的一对值(例如$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 的一些花哨的数组函数,但我无法绕过这种更复杂的情况来使用它们。有什么想法吗?
【问题讨论】:
-
我们在谈论多少个数组?您是否考虑过大量数据可能需要并行执行?
-
数组可以包含多达 300 到 4000 个元素,每个元素包含各种关联键数据,类似于我的示例数据。问题是,我必须处理数以万计的数组集,因此即使为每个数组减少几秒钟,也可能会将整个工作减少几个小时。
标签: php arrays multidimensional-array associative-array