我从数据库中获取了一个值数组,在这里我得到一个数值如下的数组:
Array ( [6712] => 64.79.197.36:43444 [6712] => 64.79.197.36:43444 [6711] => 64.79.194.56:41113 [6710] => 64.21.47.20:8080 [6709])
括号中的数字,如[6712]是数据库中的“id”字段..问题是在我的脚本中我想要使每个数组值都有我指定的第二个键,它从“0”开始并递增1,所以类似于:
Array ( [0][6712] => 64.79.197.36:43444 [1][6712] => 64.79.197.36:43444 [2][6711] => 64.79.194.56:41113 [3][6710] => 64.21.47.20:8080 [4][6709])
这是为了进行一些数据处理,所以我希望能够在我的脚本中以一种有意义的方式跟踪每一个(因为我无法预测mysql id会是什么,因为可能有删除的记录,等因此它并不总是增加1)..
我找到了一些通过分配新密钥来创建新数组的方法,但我想知道它是否可以为1个数组值设置2个键
答案 0 :(得分:5)
使用参考资料完全可能。
$result = array ( 6712 => '64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$i = 0;
foreach($result as $key => $value) {
$result[$i++] = &$result[$key];
}
var_dump($result);
echo '<br />';
$result[0] = '127.0.0.1:80';
var_dump($result);
echo '<br />';
但是这可能会让你觉得有问题。
上面的代码titbit演示了如何设置初始数组,然后为初始数组中的三个值中的每一个分配第二个键。 然后,代码修改数组中的单个条目,并演示更改反映在两个键值中;
修改强>
如果你想使用foreach(),curr()和其他控制结构元素来操作你在数组中的位置,那么在一个数组中使用这两个键将很麻烦,因为你将获取每个条目两次。使用两个数组可能更容易,第二个是指向第一个数组的一系列指针。
$result = array ( 6712 => '64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$wrkResult = array();
foreach($result as $key => $value) {
$wrkResult[] = &$result[$key];
}
var_dump($result);
echo '<br />';
var_dump($wrkResult);
echo '<br />';
$result[0] = '127.0.0.1:80';
var_dump($result);
echo '<br />';
var_dump($wrkResult);
echo '<br />';
然后你可以使用$ result或$ wrkResult,并且对另一个中的值的任何改变都将被重新选择;你可以遍历一个或另一个,只得到正确数量的结果,而不是两倍,等等。
答案 1 :(得分:1)
好吧,我的PHP有点生疏,但是让我在这个上面打开尘土飞扬的指关节:
我会为此制作变压器功能。它接受第一个数组作为输入(以“6712”等为其键),并返回第二个数组作为输出。
对于任何和所有语法错误感到抱歉,但在这里:
function indexer ($array) {
$result = array();
$i = 0;
foreach ($array as $key => $value) {
$result[$i][$key] = $value;
$i++;
}
return $result;
}
但是!如果您不严格需要二维数组,则可以在没有所有开销的情况下迭代数组。查看reset()
,next()
和prev()
功能。如果您对密钥感兴趣(在您的情况下可能是您的密钥),请参阅each()
函数。
请记住,每个数组都有一个有状态的内部指针。这意味着,如果你经常传递数组,那么指针的状态将被记住。所以请适当地致电reset()
。
答案 2 :(得分:0)
$keys = array_keys($array);
$values = array_values($array);
$easyArray = array();
foreach($keys as $keyId => $key) {
$easyArray[$keyId] = array(
'id' => $key,
'addr' => $values[$keyId]
);
}
然后你有一个易于使用的数组,索引从0到行数-1,具有正确的维数:
// get the id of element $i:
$easyArray[$i]['id']
// get the address of element $i
$easyArray[$i]['addr']