我有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");
我不知道如何解决这个问题。我试图拆分给定元素的第一个数组,但是我被卡住了。
答案 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];
}
}