代码之家  ›  专栏  ›  技术社区  ›  Abilash Erikson

在php中将$\u post排列到多维数组

  •  -1
  • Abilash Erikson  · 技术社区  · 7 年前

    提交表单时我有一个表单,如果打印$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 回复  |  直到 7 年前
        1
  •  2
  •   Xatenev    7 年前

    第一步应该是从这些数据中创建一个合适的数组: 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

        2
  •  2
  •   Kishen Nagaraju    7 年前

    你只需要循环它并准备一个新数组。

    $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);
    

    希望这有帮助。

        3
  •  2
  •   Shivrudra    7 年前
    $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);
    

    输出

    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
            )
    
    )