1

私は次の配列を持っています:

$list = array('item1','item2','item3','item4','item5','item6');

この配列を取得して、プログラムの1つの配列内の小さな配列に分割する必要があります。ファイル名を作成するには、各小さな配列のインデックス0に「999999」があり、その後に配列内の次の2つの項目が続き、次に配列$list内の同じ2つの項目が続きますが、最後にあります。したがって、最終的な結果は次のようになります。$list.pdf

$newList = array( array(999999, "item1" , "item2", "item1.pdf", "item2.pdf"),
               array(999999, "item3" , "item4", "item3.pdf", "item4.pdf"),
               array(999999, "item5" , "item6", "item5.pdf", "item6.pdf")
             ); 

元のリスト配列には、最大100個の値が含まれる場合があります。これを達成するための最良の方法は何ですか?

4

3 に答える 3

3

を使用array_spliceして、各反復で2つの要素を削除し、結果の配列を作成できます。そんな感じ:

$list = array('item1','item2','item3','item4','item5','item6');

$result = array();
while (!empty($list)) {
    $array = array_splice($list, 0, 2);

    if (count($array) == 2) {
        $result[] = array(999999, $array[0], $array[1], $array[0] . ".pdf", $array[1] . ".pdf");
    } else {
        $result[] = array(999999, $array[0], '', $array[0] . ".pdf", '');
    }
}

var_dump($result);
于 2012-09-06T17:37:48.913 に答える
1

まず、を見てくださいarray_chunk()

カスタムコードを使用して、静的要素( 999999、 )を結果に追加できます。*.pdfしかし、その時点で、MathieuImbertが提供するようなソリューションがより良い選択肢です。

注: PHPには100を超える配列関数があります。これらを学ぶことはあなたをより良いPHP開発者にするでしょう。

于 2012-09-06T17:36:00.953 に答える
0

each通常のwhileループを使用することもできます。

// solution without an array_* function                                                                    
$newList = array();                                                         
while((list(,$a) = each($list)) && (list(,$b) = each($list))) {             
    $newList[] = array(999999, $a, $b, "$a.pdf", "$b.pdf");                 
}                                                                           

print_r($newList);                                                          

またはループがまったくない(PHP> = 5.3が必要):

$newList = array_map(function($e) {                                         
    return array(999999, $e[0], $e[1], "{$e[0]}.pdf", "{$e[1]}.pdf");       
}, array_chunk($list, 2));                                                  

print_r($newList);       
于 2012-09-06T17:45:03.967 に答える