1

私は巨大な多次元配列を持っています。名前を付けましょう$big_array

さらに、上記の配列に入れる必要がある次のデータセットがあります。

$input = array('one','two','three','four');

それが $big_array にプッシュする必要があるものです (上記の $input に基づく):

 $value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one','two','three','four'),
   'page' => 'font_manager',
   );

  array_push($big_array, $value);

$big_array 構造は次のようになります。

$big_array = array(
(...)

array(
 'id' => 'Bar',
 'title' => 'Foo',
 'type' => 'select',
 'page' => 'font_manager',
 ), 

 array(
  'id' => 'ss_font',
  'title' => __("Main font:",'solidstyle_admin'), 
  'type' => 'select',
  'page' => 'font_manager',
  'description' =>  __("This font will be used for all pages.",'solidstyle_admin'),
  'default' => '',
  'options' => array(
     'option1' => 'option1',
     'option2' => 'option12,
   ),
  ),

(...)
);

私が正確にやりたいことは、配列にループを含めることができる場合、次のようになります (はい、それがどれほど間違っているかはわかっています。それをよりよく説明しようとしています):

$input = array('one','two','three','four');
$value = array(
       'id' => $number,
       'title' => 'foo',
       'type' => 'options',
       'options' => array(
         foreach($input as $number) {
           echo $number.',';
         };
        ),
       'page' => 'font_manager',
       );
4

4 に答える 4

4

あなたが何をしようとしているのか

$input = array('one','two','three','four');

に挿入

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'page' => 'font_manager',
);

次のようになります。

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one','two','three','four'),
   'page' => 'font_manager',
);

その後、$bigArrayにプッシュできます。その場合は、次のように単純にする必要があります

$input = array('one','two','three','four');
$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'page' => 'font_manager',
);
$value['options'] = $input;
$bigArray[] = $value; // equivalent to array_push($bigArray, $value);

私があなたの目標を誤解した場合は、私に知らせてください。

編集:あなたがこのような何かをしようとしているなら

$value = array(
   'id' => $number,
   'title' => 'foo',
   'type' => 'options',
   'options' => array('one,two,three,four'),
   'page' => 'font_manager',
);

それならあなたはただ変えるでしょう

$value['options'] = $input;

$value['options'] = implode(",",$input);
于 2012-12-01T12:48:25.820 に答える
1

よくわかれば。これを取得したい:

    $input = array('one','two','three','four');
    $value = array(
       'id' => $number,
       'title' => 'foo',
       'type' => 'options',
       'options' => array(
         foreach($input as $number) {
           echo $number.',';
         };
        ),
       'page' => 'font_manager',
       );

そして、それを $big_array にプッシュするには、私は正しいですか?

次に、解決策は非常に簡単です。

        $input = array('one','two','three','four');
        $value = array(
           'id' => $number,
           'title' => 'foo',
           'type' => 'options',
           'options' => array(
            ),
           'page' => 'font_manager',
           );

アレイを構築します。次に、あなたのループ:

foreach($input as $number)
{
    $value['options'][] = $number;
}

$input を「そのまま」追加したい場合は、そうすることができます

$value['options'] = $input;

'one' => 'one' が必要な場合

foreach($input as $number)
{
    $value['options'][$number] = $number;
}

ループのオーバーヘッドなしで、ループとまったく同じ結果が得られます。

そして最後に :

array_push($big_array, $value);
于 2012-12-04T14:43:46.157 に答える
1

foreachループをエミュレートする方法はいくつかあります$array['options']— 最も簡単なのは、それを行う関数を別の場所で定義し、そのオプション配列を返すことです! お気に入り:

function return_array_options($input) {
   $array = array();
   foreach($input as $number) {
     $array[] = $number 
     // or, $array['option'.$number] = $number 
   };

   return $array;
}

次に、コードの他の場所でこの関数を使用できます。

$my_array = array();
$my_array['options'] = return_array_options(array(1,2,3,4));

プログラミングでは、物事をより小さな問題の解決策に分解してから組み合わせる方が常に良いです。

array_map()また、やなどの PHP の関数型プログラミング関数も確認してくださいarray_filter()。それらは、ループ ウッドのように物事を変換するのに役立ちますが、実際にはループを使用しません。そのため、いくつかの点で構文的により柔軟です。

于 2012-11-29T05:45:59.013 に答える
1

以下のコードを見てください。私が何をしているかを理解できるようにコメントしました。

$input = array('one','two','three','four');

// set the base info here, i.e., info that is common to each push
$baseInfo = array(   
   'title' => 'foo',
   'type' => 'options',   
   'page' => 'font_manager',
   );

// now loop
foreach($input as $number) {
    // fill in base info with data that is specific to this iteration
    $baseInfo['id'] = $number;
    $baseInfo['options'] = $input;

    // do the push
    array_push($big_array, $baseInfo);
}

あなたの質問が正しいかどうか完全にはわかりません。何か他のことを尋ねていた場合は、明確にしてください。回答を編集します。

于 2012-11-26T05:20:09.637 に答える