Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,一个数组值可能有多个键?_Php_Arrays - Fatal编程技术网

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]
    );
}
然后你就有了一个简单的数组