PHP,可能有一个数组值的多个键?

时间:2010-07-17 23:58:36

标签: 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,所以类似于:

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个键

3 个答案:

答案 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']