Php 根据另一个更改数组键
我有两个阵列:Php 根据另一个更改数组键,php,arrays,Php,Arrays,我有两个阵列: $array1 = array(1 => "aaa", 4 => "bbb", 5 => "ccc", 8 => "ddd", 9 => "eee", 11 => "fff"); $array2 = array(2 => "", 3 => "", 6 => "", 7 => "", 9 => "", 13 => ""); 我想根据$array2更改$array1的键。我得到的信息是,第二个数组的一个元素必
$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");
我不知道怎么解决这个问题。我已尝试拆分给定元素所在的第一个数组,但我被卡住了。您可以使用函数
array\u keys()获取两个数组的第一个键代码>
假设,$keys1
包含$array1
的键,$keys2
包含$array2
然后进入for
循环,如下所示:
for($i=0 ; $i<count($array1) ; $i++)
{
$result[$keys2[$i+1]] = $array1[$i];
}
print_r($result);
$i=0;$i的
示例代码..但同样,您需要告诉我们确定第一个数组元素插入第二个数组元素的位置的模式。我认为它是..+2?可能是?如果您想用数组2中的值以相同的顺序更新第一个数组的所有元素:
$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];
}
}
可以定义映射和构造新数组的函数
函数传输键($key\u数组,
$value\u数组){
$a=数组映射(空,数组键($key\u数组),
$value_数组);
$result=array();
foreach($a作为$kv){
$result[$kv[0]]=$kv[1];
}
返回$result;
}
$array1=数组(1=>“aaa”,4=>“bbb”,5=>“ccc”,
8=>“ddd”,9=>“eee”,11=>“fff”);
$array2=数组(2=>“”,3=>“”,6=>“”,7=>“”,
9 => "", 13 => "");
打印(传输密钥($array2,$array1));
你怎么知道“$array2[6]必须对应于$array1[4]”?我没有得到你想要的?请重新解释it@Vatev我从另一个函数知道这一点,但基本上输入可能会随时间而变化,我应该能够在每次出现时更改第一个数组的键(可以是array2[13]必须对应于$array1[9]或其他任何内容)。请注意,两个数组的元素数相同。这没有意义,因为您没有告诉我们模式。@Raiden我打赌这是我的蹩脚英语:)但是考虑到起点:例如$a2[6]=$a1[4],第一个数组的所有其他元素都应该根据第二个数组中的键设置。每个数组的键之间没有图案。但是同一数组的两个元素之间的距离总是相同的。例如$a1-->1 3 4 7 11$a2-->70 73 74 77 81如果我知道73-->11,我会将第一个数组中的数字更改为$a1-->74 77 81 70 73
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];
}
}