-3

PHP中有函数array_values这样

$array2 = array_values($array1);

$array2具有相同的值,$array1但键是 from 0to sizeof($array1) - 1。是否可以从旧键映射到新键?
编辑。我将举例说明:

$array1 = array( 'a' => 'val1', 'b' => 'val1');
$array2 = array_values( $array1 );

所以现在 array2 有下一个值

$array2[0] = 'val1'
$array2[1] = 'val2'

如何得到 array3 这样:

$array3['a'] = 0
$array3['b'] = 1
4

5 回答 5

6

要生成键映射,您需要首先将键放入常规数组,然后翻转键和值:

$array1_keymap = array_flip(array_keys($array1));

例如:

$array1 = array(
    'a' => 123,
    'b' => 567,
);

$array1_values = array_values($array1);
$array1_keymap = array_flip(array_keys($array1));

的价值$array1_values

array(
    0 => 123,
    1 => 567,
);

的价值$array1_keymap

array(
    'a' => 0,
    'b' => 1,
);

所以:

$array1['a'] == $array1_values[$array1_keymap['a']];
$array1['b'] == $array1_values[$array1_keymap['b']];
于 2012-06-06T23:10:42.350 回答
3

是的,很简单

$array2 = $array1;

在这种情况下,您将获得值和键,就像它们在原始数组中一样。

于 2012-06-06T23:09:37.573 回答
1
$keyMapping = array_combine(array_keys($array1), array_keys($array2));

这是的键$array1并将它们映射到这样的$array2

<?php
$array1 = array(
    'a' => '1',
    'b' => '2',
);

$array2 = array_values($array1);

print_r(array_combine(array_keys($array1), array_keys($array2)));

Array
(
    [a] => 0
    [b] => 1
)
于 2012-06-06T23:09:11.290 回答
0

您可以使用:

$array3 = array_keys($array1);

现在$array3[$n]$array2[$n]任何值的关键0 <= $n < count($array1)。您可以使用它来确定哪些键在哪些位置。

于 2012-06-06T23:09:01.700 回答
0

如果您想保持 array1 的相同值但将键更改为索引号,请尝试以下操作:

$array2 = array();
foreach ($array1 as $key => $value){
$array2[] = $value;
// or array_push($array2, $value);
}
var_dump($array2);
于 2012-06-06T23:30:33.167 回答