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 のキーを変更したい。2 番目の配列の要素が最初の配列の別の要素に対応する必要があるという情報が与えられました。たとえば、$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

最初の配列のすべての要素を 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 に答える
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 番目の配列要素に挿入される場所を決定するパターンを教えていただく必要があります。私はそれだと思う.. +2?多分?

于 2012-07-29T17:41:41.103 に答える