1

だから私はここで少し立ち往生しています、私はforeachループでそれを行うことができますが、それを行うためのより賢い方法を見つけたいと思います。

更新:質問で見逃したことがありました。配列はランダムな順序で長さが異なるため、キーが異なります。以下の例を更新しました。

ケースは次のとおりです。

Array1

array (
    slug1 => England,
    slug2 => France,
    slug3 => Italy,
    slug4 => Germany,
)

Array2

array (
    slug2 => 215,
    slug1 => 168,
    slug4 => 55,
    slug5 => 149,
    slug3 => 40,
    slug6 => 137,
)

これらの配列を交差させて、次の要素を持つ新しい配列を作成したいと思います。

array (
    168 => England,
    215 => France,
    40 => Italy,
    55 => Germany,
)

注:要素は簡単に実現できますが、順序付けされていません。

4

5 に答える 5

2

Babaの答えはうまくいくはずですが、配列やサイズの両方の間で異なるキーの順序を処理するための興味深い方法があります。

// get values from $array2 in the order in which they appear in $array1
// whereby the array keys are used to match them
$keys = array_intersect_key($array2, $array1);
// create a new array with the keys found in the previous step and 
// another array_intersect_key() to only select the matching items
// from $array1
array_combine($keys, array_intersect_key($array1, $keys));

array_combine()また、同じサイズのアレイで機能することも確認します。のサイズ$array2は出力サイズです。

于 2012-11-16T10:27:16.000 に答える
2

元の質問への回答

array_combineキーに1つの配列を使用し、値に別の配列を使用して配列を作成するために使用できます

$array1 = array(
        "slug1" => "England",
        "slug2" => "France",
        "slug3" => "Italy",
        "slug4" => "Germany");

$array2 = array(
        "slug1" => "168",
        "slug2" => "215",
        "slug3" => "40",
        "slug4" => "55");

$final = array_combine($array2, $array1);

echo "<pre>";
print_r($final);

出力

Array
(
    [168] => England
    [215] => France
    [40] => Italy
    [55] => Germany
)

ライブデモを見る

更新された質問への回答

Update: There was something that I've missed in the question. The arrays may come in random order and in different length thus having different keys. Examples below updated.

$array1 = array(
        "slug1" => "England",
        "slug2" => "France",
        "slug3" => "Italy",
        "slug4" => "Germany");

$array2 = array (
        "slug2" => 215,
        "slug1" => 168,
        "slug4" => 55,
        "slug5" => 149,
        "slug3" => 40,
        "slug6" => 137);



$final = customCombine($array2, $array1);

echo "<pre>";
print_r($final);

出力

Array
(
    [215] => France
    [168] => England
    [55] => Germany
    [40] => Italy
)

使用した機能

function customCombine($keys, $arr) {
    $t = array();
    foreach ( $keys as $k => $val ) {
        isset($arr[$k]) and $t[$val] = $arr[$k];
    }
    return $t;
}
于 2012-11-16T10:18:10.723 に答える
1

ジャックの答えを拡張するには、キーが一致する順序ではなく、構築された順序で配列を組み合わせる可能性があるためです。

Array
(
    [215] => England
    [168] => France
    [55] => Italy
    [40] => Germany
)

一部の中間データジャグリングはそれを分類できます(そして、どの配列が短くても機能します):

$array1 = array(
    'slug1' => 'England',
    'slug2' => 'France',
    'slug3' => 'Italy',
    'slug4' => 'Germany'
);

$array2 = array (
    'slug2' => 215,
    'slug1' => 168,
    'slug4' => 55,
    'slug5' => 149,
    'slug3' => 40,
    'slug6' => 137
);

$keys = array_intersect_key($array2, $array1);
ksort($keys);
$intersect = array_intersect_key($array1, $keys);
ksort($intersect);
$final = array_combine($keys, $intersect);

print_r($final);

出力

Array
(
    [168] => England
    [215] => France
    [40] => Italy
    [55] => Germany
)
于 2013-12-12T10:33:17.073 に答える
0

私は私にとって最良の解決策を見つけました:

http://eval.in/3578

<?php

$array1 = array("slug1" => "England","slug2" => "France","slug3" => "Italy","slug4" => "Germany");
$array2 = array("slug1" => "168","slug2" => "215","slug3" => "40","slug4" => "55", "slug5" => "178");

ksort($array1);
ksort($array2);

$test1 = array_intersect_key($array1, $array2);
$test2 = array_intersect_key($array2, $array1);

$final = array_combine($test2, $test1);
print_r($final);
?>
于 2012-11-16T10:41:09.543 に答える
0

使用するarray_combine()

<?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);
?>

http://in1.php.net/array-combine

于 2012-11-16T10:20:19.340 に答える