0

我有 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

4 回答 4

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));
于 2012-07-29T18:24:04.183 回答
0

您可以使用函数获取两个数组的第一个键array_keys();

假设,$keys1包含的键$array1和包含的$keys2$array2

然后进入for循环如下:

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

print_r($result);

希望这对你有帮助

于 2012-07-29T17:41:01.187 回答
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?也许?

于 2012-07-29T17:41:41.103 回答
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];
    } 
}
于 2012-07-29T17:59:17.970 回答