根据另一个更改数组键

时间:2012-07-29 17:28:32

标签: php arrays

我有2个阵列:

$array1 = array(1 => "aaa", 4 => "bbb", 5 => "ccc", 8 => "ddd", 9 => "eee", 11 => "fff");
$array2 = array(2 => "", 3 => "", 6 => "", 7 => "", 9 => "", 13 => ""); 

我想根据$ array2更改$ array1的键。我得到的信息是第二个数组的元素必须与第一个元素的另一个对应。例如,我知道$ array2 [6]必须对应于$ array1 [4]。

所以我应该根据这个规则改变$ array1的所有键:

$array1 = array(3 => "aaa", 6 => "bbb", 7 => "ccc", 9 => "ddd", 13 => "eee", 2 => "fff");

我不知道如何解决这个问题。我试图拆分给定元素的第一个数组,但是我被卡住了。

4 个答案:

答案 0 :(得分:1)

您可以定义一个映射和构造新数组的函数。

function transfer_keys($key_array,
                       $value_array) {
    $a = array_map(null, array_keys($key_array),
                   $value_array);
    $result = array();
    foreach($a as $kv) {
        $result[$kv[0]] = $kv[1];
    }
    return $result;
}

$array1 = array(1 => "aaa", 4 => "bbb", 5 => "ccc", 
                8 => "ddd", 9 => "eee", 11 => "fff"); 
$array2 = array(2 => "", 3 => "", 6 => "", 7 => "", 
                9 => "", 13 => "");    

print_r(transfer_keys($array2, $array1));

答案 1 :(得分:0)

您可以使用函数array_keys();

获取两个数组的第一个键

假设,$keys1包含$array1的{​​{1}}和$keys2 cotains键的密钥$array2

然后进入for循环,如下所示:

for($i=0 ; $i<count($array1) ; $i++)
{
    $result[$keys2[$i+1]] = $array1[$i];
}

print_r($result);

希望这会对你有所帮助

答案 2 :(得分:0)

foreach($array1 as $item => $value)
 if(isset($array2[($item + 2)]) && item != 11)
  $temp[$item + 2] = $value;
 elseif($item == 11)
  $temp[2] = $value;
$array1 = @$temp;

示例代码..但同样,您需要告诉我们确定第一个数组元素插入第二个数组元素的位置的模式。我想是.. + 2?可能?

答案 3 :(得分:0)

如果您想以相同的顺序使用array2中的值更新第一个数组的所有元素:

$i = 0;
foreach ($array1 as $v) {
    while (!isset($array2[$v]))
        $i++;
    $array2[$i] = $v;
}

但是如果你想根据你预先定义的订单进行更新,你必须制作其他东西,比如定义规则的表格:

$assoc_array = array(
    2 => 4,
    3 => 7,
    4 => 11,
    6 => 5,
    5 => 9,
    8 => 1);
foreach ($assoc_array as $k => $v) {
    $array1[$k] = $array2[$v];
}        

希望这有帮助。

噢,你知道区别总是一样的!

然后这应该是这样的:

function updateArray ($array1, $array2, $key_of_array1, $key_associated_of_array2) {
    $diff = $key_associated_of_array2 - $key_of_array1;
    foreach ($array1 as $k => $v) {
        $array2[$k + $diff] = $array1[$k];
    } 
}