2

2 つのループによって作成された 2 つのインデックス付き配列があります。

$質問

Array ( 
    [10] => Yes 
    [11] => No 
    [12] => Yes 
    [13] => No 
    [14] => Yes 
    [15] => No 
)

$コメント

Array ( 
    [10] => comment 
    [11] => comment 
    [12] => comment 
    [13] => comment 
    [14] => comment 
    [15] => comment 
)

以下の結果を取得し、インデックスを保持するようにそれらを組み合わせるにはどうすればよいですか。

Array ( 
    [10] => Yes, comment 
    [11] => No, comment 
    [12] => Yes, comment 
    [13] => No, comment 
    [14] => Yes, comment 
    [15] => No, comment 
 )

array_merge を見ましたが、キーが同じ場合は追加されます。

入力配列に同じ文字列キーがある場合、そのキーの後の値が前の値を上書きします。ただし、配列に数値キーが含まれている場合、後の値は元の値を上書きせずに追加されます。

array_combine を見ましたが、それは:

keys 配列の値をキーとして使用し、values 配列の値を対応する値として使用して、配列を作成します。

それらを「結合」するには3番目のループが必要だと確信していますが、どうすればそれを行うことができますか?

4

4 に答える 4

4

これにより、いくつかのオプションが提供されます。$questions と $comments の間のキーが同期しているという論理的な仮定を作成し、奇妙なキーがあれば処理します。

<?php
$questions = array(
    '10' => 'Yes',
    '11' => 'No',
    '12' => 'Yes',
    '13' => 'No',
    '14' => 'Yes',
    '15' => 'No',
    '16' => 'No'
 );
$comments = array(
    '10' => 'comment 10',
    '11' => 'comment 11',
    '12' => 'comment 12',
    '13' => 'comment 13',
    '14' => 'comment 14',
    '15' => 'comment 15',
    '17' => 'comment 17'
 );

$combinedAsArray = array();
$combinedAsString = array();

foreach ($questions as $key => $value){

    if (array_key_exists($key, $comments)){
        $combinedAsArray[$key] = array($value, $comments[$key]);
        $combinedAsString[$key] = "$value, {$comments[$key]}";
    }else{
        $combinedAsArray[$key] = array($value, null);
        $combinedAsString[$key] = "$value, ";
    }
}

foreach ($comments as $key => $value){
    if (! array_key_exists($key, $questions)){
        $combinedAsArray[$key] = array(null, $value);
        $combinedAsString[$key] = " , $value";
    }
}

print_r($combinedAsArray);
print_r($combinedAsString);
于 2013-03-28T15:43:27.650 に答える
4

まったく同じキーを持っていることがわかっている場合:

$new = array();
foreach($questions AS $key => $value) {
    $new[$key] = $value . ", " . $comments[$key];
}
于 2013-03-28T15:42:45.313 に答える
3

次のように、これで配列マップを実行できます。

$merged_array = array_map(function($a, $b) {
    return $a . ', ' . $b;
}, $array1, $array2);

または、連結された文字列が必要ない場合は、次のようなものです

Array(
    0 => Array(
        0 => 'Yes',
        1 => 'comment 10',
    )
    ...
)

null次のように配列マップに渡すことができます。

$merged_array = array_map(null, $array1, $array2);
于 2013-03-28T16:01:53.460 に答える
1

配列のインデックスが同じ場合、解決策は次のようになります。

foreach($first_array as $index => $value){
    $output_array[$index] = $value . ", " . $second_array[$index];
}
于 2013-03-28T15:43:22.123 に答える