5

私は配列を持っています

$names = array( "Ayush" , "Vaibhav", "Shivam", "Hacker", "Topper",
                "ABCD",  "NameR", "Tammi", "Colgate", "Britney",
                "Bra", "Kisser");

そして、私は別の変数を持っています

$addthis = "ADDTHIS";

の 3 つの項目ごと$namesに の値$addthisが追加されるように、これら 2 つの配列を作成する方法。したがって、これら 2 つの結果としてこの配列が必要です。

$result = array( "Ayush" , "Vaibhav", "Shivam", "ADDTHIS", "Hacker",
                 "Topper", "ABCD", "ADDTHIS",  "NameR", "Tammi",
                 "Colgate", "ADDTHIS", "Britney", "Bra", "Kisser");

適切なコードを教えてください。どんな助けでも大歓迎です。

4

7 に答える 7

4

楽しみのための「ワンライナー」:

$new = array_reduce(
    array_map(
        function($i) use($addthis) { return count($i) == 3 ? array_merge($i, array($addthis)) : $i; },
        array_chunk($names, 3)
    ),
    function($r, $i) { return array_merge($r, $i); },
    array()
);
于 2012-12-16T12:00:48.787 に答える
1

別のワンライナー;)

$result = call_user_func_array(
    'array_merge', array_map(function($v) use ($addthis) {
        return $v + [4 => $addthis];
    }, array_chunk($names, 3))
); array_pop($result);

デモ

于 2012-12-16T12:06:30.660 に答える
-1
$result = array();
$cnt = 0;
foreach ($names AS $val) {
    $result[] = $val;
    if ($cnt >=3) {
        $result[] = $addthis;
        $cnt = 0;
    }
    $cnt++;
}
于 2012-12-16T11:57:43.327 に答える
-1

ループして、モジュロを使用して 3 をチェックします。 element: その後、splice を使用して 2 つの要素の間に要素を挿入します。

    foreach($result as $k=>$value){
 if(($k+1)%3==0){
   array_splice($arrayvariable, $k+1, 0, "ADDTHIS");
 }
}
于 2012-12-16T11:58:21.600 に答える
-2

やりたくないことの 1 つは、配列内のすべてのキーが数値であり、各要素のオフセットを正確に表していると想定することです。PHP 配列は従来の配列とは異なるため、これは誤りです。配列キーは要素のオフセットではなく (つまり、要素の順序を決定するものではありません)、数値である必要はありません。

残念ながら、PHP 配列は従来の配列ではなく、順序付けられたハッシュマップであるため、マップの途中に新しい要素を挿入する唯一の方法は、まったく新しいマップを作成することです。

これを行うには、PHP のarray_chunk()関数を使用します。この関数は、入力配列から指定された数までの要素をそれぞれ含む要素の新しい配列を作成します。したがって、配列の配列または要素のチャンクを作成します。このようにして、チャンクを反復処理して新しい配列に追加し、目的の効果を得ることができます。

$names = array( "Ayush" , "Vaibhav", "Shivam", "Hacker", "Topper",
                "ABCD",  "NameR", "Tammi", "Colgate", "Britney",
                "Bra", "Kisser");

$addthis = "ADDTHIS";

$result = array();

foreach (array_chunk($names, 3) as $chunk) { // iterate over each chunk
    foreach ($chunk as $element) {
        $result[] = $element;
    }
    // Now push your extra element at the end of the 3 elements' set
    $result[] = $addthis;
}

キーも保存したい場合は、これを行うことができます....

$names = array( "Ayush" , "Vaibhav", "Shivam", "Hacker", "Topper",
                "ABCD",  "NameR", "Tammi", "Colgate", "Britney",
                "Bra", "Kisser");

$addthis = "ADDTHIS";

$result = array();

foreach (array_chunk($names, 3, true) as $chunk) { // iterate over each chunk
    foreach ($chunk as $key => $element) {
        $result[$key] = $element;
    }
    // Now push your extra element at the end of the 3 elements' set
    $result[] = $addthis;
}

これにより、要素の順序と各要素のキーの両方が維持されます。ただし、キーを気にしない場合は、単純に最初の例を使用できます。この例で追加された要素は、次に利用可能な数字キーを想定しているため (したがって、次の反復で上書きされます)、順番に数字キーを使用すると、2 番目のアプローチで問題が発生することに注意してください。

于 2012-12-16T12:19:29.110 に答える