PHP создает динамический массив в многомерном массиве - PullRequest
0 голосов
/ 19 октября 2011

Я хочу динамически создать массив на основе числа внутри многомерного массива

вот код

$meta_box = array(  
'id' => 'my-meta-box',
'title' => 'Custom Input Fields',
'page' => 'page',
'context' => 'normal',
'priority' => 'high',
'fields' => array (
                  array( //this array must be created dynamic 
                      'name' => 'Textarea',
                      'desc' => 'Enter big text here',
                      'id' => 'textarea', //id is textarea + number
                      'type' => 'textarea',
                      'std' => 'Default value'
                  )
            )
);

Я хочу, чтобы последний массив создавался динамически по числу, поэтому, если число равно 2, там должно быть 2 массива с тем же именем, desc, type, str, но с другим идентификатором.

возможно ли это как-то?

Ответы [ 3 ]

6 голосов
/ 19 октября 2011

Просто добавьте их динамически, перебирая количество идентификаторов:

$meta_box = array
(
    'id' => 'my-meta-box',
    'title' => 'Custom Input Fields',
    'page' => 'page',
    'context' => 'normal',
    'priority' => 'high',
    'fields' => array ()
);


$dynamicNumber = 2;
$idPrefix = 'textarea';
assert('$dynamicNumber > 0');
$dynamicIds = range(1, $dynamicNumber);

$fields = &$meta_box['fields'];
foreach($dynamicIds as $id)
{
    $fields[] = array( //this array must be created dynamic 
                      'name' => 'Textarea',
                      'desc' => 'Enter big text here',
                      'id' => sprintf('%s%d', $idPrefix, $id), //id is textarea + number
                      'type' => 'textarea',
                      'std' => 'Default value'
                  );
}
unset($fields);

Демо

2 голосов
/ 19 октября 2011

Вот способ добавления каждого подмассива 'fields' в качестве нового массива в больший массив

<code>$meta_box = array(  
'id' => 'my-meta-box',
'title' => 'Custom Input Fields',
'page' => 'page',
'context' => 'normal',
'priority' => 'high');

$fields = array();

$numberOfArrays = 2;

for($i = 1; $i <= $numberOfArrays; $i++){
    $fields[$i] = array (
                  array( //this array must be created dynamic 
                      'name' => 'Textarea',
                      'desc' => 'Enter big text here',
                      'id' => 'textarea' . $i, //id is textarea + number
                      'type' => 'textarea',
                      'std' => 'Default value'
                  )
            );
}

$meta_box['fields'] = $fields;

echo '<pre>';
print_r($meta_box);
echo '
';

В вашем браузере вы увидите такой вывод:

Array
(
    [id] => my-meta-box
    [title] => Custom Input Fields
    [page] => page
    [context] => normal
    [priority] => high
    [fields] => Array
        (
            [1] => Array
                (
                            [name] => Textarea
                            [desc] => Enter big text here
                            [id] => textarea1
                            [type] => textarea
                            [std] => Default value
                )
        [2] => Array
                (
                            [name] => Textarea
                            [desc] => Enter big text here
                            [id] => textarea2
                            [type] => textarea
                            [std] => Default value
                )
        )
)

Демо

0 голосов
/ 19 октября 2011

Сначала вы создаете массив $ meta_box следующим образом:

$meta_box = array(  
  'id' => 'my-meta-box',
  'title' => 'Custom Input Fields',
  'page' => 'page',
  'context' => 'normal',
  'priority' => 'high',
  'fields' => array ()
);

Затем вы можете добавить «динамические» массивы следующим образом:

$number = 2;
for ($i = 1; $i <= $number; $i++) {
  $meta_box['fields'][] = array(
    'name' => 'Textarea',
    'desc' => 'Enter big text here',
    'id' => 'textarea_' . $i, //id is textarea + number
    'type' => 'textarea',
    'std' => 'Default value'
  );
}

Начинается нумерация идентификаторов с 1 до $ number.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...