【发布时间】:2017-02-14 15:17:36
【问题描述】:
我有一个数组,我使用其中的一些项来构造更多数组,下面是一个粗略的示例。
$rows = [
[1, 2, 3, 'a', 'b', 'c'],
[4, 5, 6, 'd', 'e', 'f'],
[4, 5, 6, 'g', 'h', 'i'],
];
$derivedData = [];
foreach ($rows as $data) {
$key = $data[0] . '-' . $data[1] . '-' . $data[2];
$derivedData['itemName']['count'] ++;
$derivedData['itemName']['items'][$key]['a'] = $data[3];
$derivedData['itemName']['items'][$key]['count'] ++;
}
现在,如果我转储数组,它将看起来像
derivedData: [
itemName: [
count: 3
items: [
1-2-3: [
a: a,
count: 1
],
4-5-6: [
a: g,
count: 2
],
]
]
]
如您所见,derivedData.itemName.count.items 中的键是字符串。如果我改为这样做,我会获得任何好处吗?
$uniqueId = 0;
$uniqueArray = [];
$rows = [
[1, 2, 3, 'a', 'b', 'c'],
[4, 5, 6, 'd', 'e', 'f'],
[4, 5, 6, 'g', 'h', 'i'],
];
$derivedData = [];
foreach ($rows as $data) {
$uniqueArrayKey = $data[0] . '-' . $data[1] . '-' . $data[2];
if (!isset($uniqueArray[$uniqueArrayKey])) {
$uniqueArray[$uniqueArrayKey] = $uniqueId++;
}
$uniqueKey = $uniqueArray[$uniqueArrayKey];
$derivedData['itemName']['count'] ++;
$derivedData['itemName']['items'][$uniqueKey ]['a'] = $data[3];
$derivedData['itemName']['items'][$uniqueKey ]['count'] ++;
}
现在我将有一个索引数组和实际数据数组。
uniqueArray: [
1-2-3: 0,
4-5-6: 1
]
derivedData: [
itemName: [
count: 3
items: [
0: [
a: a,
count: 1
],
1: [
a: g,
count: 2
],
]
]
]
我问自己的问题是 PHP 是否在使用字符串键时在内部为我执行此操作,即将它们保存在某处并将它们作为键的指针引用而不是每次都复制它们?
换句话说 - 假设我有变量 $a,如果我将它用作不同数组中的键,$a 的值将用于(并复制)每个数组作为键或内存中的指针被使用,这基本上是我的问题?
【问题讨论】:
-
我对示例代码感到困惑 - 在循环中您引用
$data['a'],但是在任何行中都没有键a -
@ChrisO'Kelly 抱歉,已修复。
标签: php arrays php-internals