Упорядочить $ _POST для многомерного массива в PHP - PullRequest
0 голосов
/ 31 мая 2018

У меня есть форма при отправке формы, и если вы напечатаете $ _POST, я получу вывод, подобный следующему

    [type] =>'new',
[class] =>'10',
[div] =>c,
[id_228] => 228,
[title_228]=> First,
[colour_228]=> red,
[id_229] => 229,
[title_229]=> second,
[colour_229]=> blue,
[id_230] => 230,
[title_230]=> third,
[colour_230]=> yellow,
[id_231] => 231,
[title_231]=> fourth,
[colour_231]=> orange,

и т.д.массив.Пожалуйста, посмотрите массив результатов

result_array[1]=array("Title", 'Color')

, поэтому в этом массиве результатов я должен добавить $ _POST, как это

result_array[228]=array("First","red")
result_array[229]=array("Second","blue")
result_array[230]=array("Third","yellow")
result_array[231]=array("Fourth","red")

Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Первым шагом должно быть создание правильно выглядящего массива из этих данных: https://3v4l.org/r0HZ9

$post = [
    'id_228' => 228,
    'title_228' => "First",
    'colour_228' => 'red',

    'id_229' => 228,
    'title_229' => "Second",
    'colour_229' => 'blue'];


// Transform data into a proper format
$resultArray = [];
foreach($post as $key => $val) {
    $key = explode('_',$key);
    $resultArray[$key[1]][$key[0]] = $val;
}

// Now do whatever you want to do 
var_dump($resultArray);

Теперь вы можете добавить больше логики ... Если вам нужны данные в предложенном вами формате, вы можете сделать

$result = [];
foreach($resultArray as $item) { 
    $result[] = [$item['title'], $item['colour']];
}

https://3v4l.org/WC2B0

РЕДАКТИРОВАТЬ: Поскольку вы добавили

[type] =>'new',
[class] =>'10',
[div] =>c,

, вы можете создать список разрешенных полей, которые должныбыть добавлено, может быть что-то вроде:

// Transform data into a proper format
$resultArray = [];
$allowedFields = ['id', 'title', 'colour'];
foreach($post as $key => $val) {
    $key = explode('_',$key);
    if(in_array($key[0], $allowedFields)) {
        $resultArray[$key[1]][$key[0]] = $val;
    }
}

https://3v4l.org/NQGfa

0 голосов
/ 31 мая 2018
$arr= ["id_228" => 228, "title_228" => "First",
"colour_228"=> "red",
"id_229" => 229,
"title_229"=> "second",
"colour_229"=> "blue",
"id_230" => 230,
"title_230"=> "third",
"colour_230"=> "yellow",
"id_231" => 231,
"title_231"=> "fourth",
"colour_231"=> "orange" ];

foreach($arr as $key => $value) {
    $d = explode( '_', $key );
    if(true == is_numeric( $value)) {
        continue;
    }
    $c[$d[1]][]= $value ;
}
print_r($c);

Out put

Array
(
    [228] => Array
        (
            [0] => First
            [1] => red
        )

    [229] => Array
        (
            [0] => second
            [1] => blue
        )

    [230] => Array
        (
            [0] => third
            [1] => yellow
        )

    [231] => Array
        (
            [0] => fourth
            [1] => orange
        )

)
0 голосов
/ 31 мая 2018

Вам придется просто зациклить его и подготовить новый массив.

$result = array();
foreach ($_POST as $key => $value) {
    list($title, $key) = explode('_', $key);
    if (!is_array($result[$key])) $result[$key] = array();

    $result[$key][$title] = $value;
}

var_dump($result);

Надеюсь, это поможет.

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