Как создать многомерный массив из одинаковых полей формы? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть вкладки с одинаковыми именами полей формы, в каждой из которых я хочу отображать данные типа

$meta_query = array(
    'relation' => 'OR',
    array(
        'key'     => 'Demo',
        'value'   => 'demo',
        'compare' => '=',
        'type'    => 'NUMERIC',
    ),
    array(
        'key'     => 'test',
        'value'   => 'tes',
        'compare' => '=',
        'type'    => 'NUMERIC',
    ),
);

Но я получаю ответ, как показано ниже:

Array
(
    [relation] => AND
    [key1] => Demo
    [value1] => demo
    [compare1] => =
    [type1] => NUMERIC
    [key2] => test
    [value2] => test
    [compare2] => =
    [type2] => NUMERIC
)

Любые решения будут оценены!

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Комбинация array_splice и array_chunk сделает свое дело.

$new = array_merge(array_splice($arr, 0,1), array_chunk($arr, 4, true));
var_export($new);

Вывод:

array (
  'relation' => 'AND',
  0 => 
  array (
    'key1' => 'Demo',
    'value1' => 'demo',
    'compare1' => '=',
    'type1' => 'NUMERIC',
  ),
  1 => 
  array (
    'key2' => 'test',
    'value2' => 'test',
    'compare2' => '=',
    'type2' => 'NUMERIC',
  ),
)

https://3v4l.org/eaqpk

Если вам нужно удалить 1и 2 в ключах, тогда вы можете зациклить массив и использовать array_combine для замены ключей

foreach($new as &$a){
    if(is_array($a)) $a = array_combine(["key", "value", "compare", "type"],$a);
}

https://3v4l.org/LQil4


Соединить массив и использоватьpreg_match для разделения слова и числа в ключе.
Добавьте значение к «номеру ключа -1» в массиве результатов.

$new = array_splice($arr, 0,1);

foreach($arr as $k => $v){
    preg_match("/(.*?)(\d+)/", $k, $m);
    $new[$m[2]-1][$m[1]] = $v;
}
var_export($new);

https://3v4l.org/CHLGT

0 голосов
/ 19 апреля 2019

Установить индекс имени поля в форме:

<input type="text" name="entity[0]key"/>
<input type="text" name="entity[0]value"/>
<input type="text" name="entity[0]compare"/>
<input type="text" name="entity[0]type"/>

<input type="text" name="entity[1]key"/>
<input type="text" name="entity[1]value"/>
<input type="text" name="entity[1]compare"/>
<input type="text" name="entity[1]type"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...