PHP,一个数组值可能有多个键?
我从数据库中获取一个值数组,其中包含如下值的数组:PHP,一个数组值可能有多个键?,php,arrays,Php,Arrays,我从数据库中获取一个值数组,其中包含如下值的数组: 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,类似于: A
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)
我找到了一些方法,通过分配一个新的键来创建一个新数组,但我想知道是否有可能为一个数组值分配两个键。好吧,我的PHP有点生锈了,但让我在这一个上敲碎我满是灰尘的指节: 我会为此制作一个变压器功能。它接受第一个数组作为其输入(带有“6712”等键的数组),并返回第二个数组作为其输出 对于所有语法错误,我们深表歉意,但下面是:
function indexer ($array) {
$result = array();
$i = 0;
foreach ($array as $key => $value) {
$result[$i][$key] = $value;
$i++;
}
return $result;
}
但是如果您不严格需要二维数组,则可以在数组上迭代,而无需所有开销。请参阅、和功能。如果您对该键感兴趣(在您的情况下,您可能对该键感兴趣),请参阅函数
请记住,每个数组都有一个有状态的内部指针。这意味着,如果在数组中多次传递,指针的状态将被记住。因此,适当地调用
reset()
。好吧,我的PHP有点生锈了,但让我在这一点上敲碎我满是灰尘的指节:
我会为此制作一个变压器功能。它接受第一个数组作为其输入(带有“6712”等键的数组),并返回第二个数组作为其输出
对于所有语法错误,我们深表歉意,但下面是:
function indexer ($array) {
$result = array();
$i = 0;
foreach ($array as $key => $value) {
$result[$i][$key] = $value;
$i++;
}
return $result;
}
但是如果您不严格需要二维数组,则可以在数组上迭代,而无需所有开销。请参阅、和功能。如果您对该键感兴趣(在您的情况下,您可能对该键感兴趣),请参阅函数
请记住,每个数组都有一个有状态的内部指针。这意味着,如果在数组中多次传递,指针的状态将被记住。因此,适当地调用
reset()
。使用引用是完全可能的
$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 />';
$result=array(6712=>'64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$i=0;
foreach($结果为$key=>$value){
$result[$i++]=&$result[$key];
}
var_dump($结果);
回声“
”;
$result[0]=“127.0.0.1:80”;
var_dump($结果);
回声“
”;
但这可能会给你带来麻烦
上面的代码标题演示如何设置初始数组,然后为初始数组中的三个值中的每一个分配第二个键。
然后,代码修改数组中的一个条目,并证明更改反映在两个键值中
编辑
如果您想使用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=array(6712=>'64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$wrkResult=array();
foreach($结果为$key=>$value){
$wrkResult[]=&$result[$key];
}
var_dump($结果);
回声“
”;
var_dump($wrkResult);
回声“
”;
$result[0]=“127.0.0.1:80”;
var_dump($结果);
回声“
”;
var_dump($wrkResult);
回声“
”;
然后,您可以使用$result或$wrkResult,对其中一个值的任何更改都将在另一个中重新选择;您可以通过一个或另一个循环,只获得正确数量的结果,而不是两倍的结果,等等。使用引用是完全可能的
$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 />';
$keys = array_keys($array);
$values = array_values($array);
$easyArray = array();
foreach($keys as $keyId => $key) {
$easyArray[$keyId] = array(
'id' => $key,
'addr' => $values[$keyId]
);
}
$result=array(6712=>'64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$i=0;
foreach($结果为$key=>$value){
$result[$i++]=&$result[$key];
}
var_dump($结果);
回声“
”;
$result[0]=“127.0.0.1:80”;
var_dump($结果);
回声“
”;
但这可能会给你带来麻烦
上面的代码标题演示如何设置初始数组,然后为初始数组中的三个值中的每一个分配第二个键。
然后,代码修改数组中的一个条目,并证明更改反映在两个键值中
编辑
如果您想使用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=array(6712=>'64.79.197.36:43444',
6711 => '64.79.194.56:41113',
6710 => '64.21.47.20:8080'
);
$wrkResult=array();
foreach($结果为$key=>$value){
$wrkResult[]=&$result[$key];
}
var_dump($结果);
回声“
”;
var_dump($wrkResult);
回声“
”;
$result[0]=“127.0.0.1:80”;
var_dump($结果);
回声“
”;
var_dump($wrkResult);
回声“
”;
然后,您可以使用$result或$wrkResult,对其中一个值的任何更改都将在另一个中重新选择;您可以通过一个或另一个循环,只得到正确数量的结果,而不是两倍的结果,等等
$keys = array_keys($array);
$values = array_values($array);
$easyArray = array();
foreach($keys as $keyId => $key) {
$easyArray[$keyId] = array(
'id' => $key,
'addr' => $values[$keyId]
);
}
然后你就有了一个简单的数组