【问题标题】:Multidimensional array structure like php print_r多维数组结构,如 php print_r
【发布时间】:2012-12-10 11:39:37
【问题描述】:

我有这样的形式:

    <form id="incomes" method="post" action="#">
      <input type="text" name="date[]"/>
      <input type="text" name="income[]"/>
      <input type="text" name="tax[]"/>
      <input type="text" name="social_insurance[]"/>
      <input type="text" name="health_insurance[]"/>
    </form>

我要做的就是通过 jQuery ajax 将输入发布到 php 中,结构如下:

Array(
    [0] => Array(
        date => 2012-12-10
        income => 1000
        tax => 100
        social_insurance => 50
        health_insurance => 50
    )
    [1] Array(
        date => 2012-12-15
        income => 2000
        tax => 150
        social_insurance => 20
        health_insurance => 50
    )
)

有什么简单的方法可以实现吗?我听说过 serialize() 函数,但这不是我想要的......

【问题讨论】:

    标签: jquery ajax multidimensional-array


    【解决方案1】:

    我一直都是自己做的,但我是在 PHP 端循环通过数组来做的:

    $newarray = array();
    foreach($_POST["date"] AS $i => $date) {
        $newarray[$i]["date"] = $date;
    }
    

    等等..

    因此,您可以按原样通过 ajax 发送数据并在服务器端执行所有操作,在那里您可以在处理和输出结果之前对数组进行排序和执行任何您需要的操作

    【讨论】:

      【解决方案2】:

      使用 jQuery serialize() 发送表单数据是发送数据的最简单方法。您需要遍历 php 中的各个字段数组以创建所需的数组结构

      $('#incomes').submit(function(){
      
          $.post(url, $(this).seralize(), function(response){
             /*run any  ajax complete code here*/
          }) ;
         /* prevent browser default form submit*/
         return false;
      
      });
      

      $_POST 看起来像:

        array(
            date=> array(),
             income=>array()/* etc*/
        }
      

      PHP 新数组循环可能类似于:

      $newArray=array();
      
      foreach($_POST as $key=>$value){
          if( !empty( $value) && is_array($value)){
               for( $i=0;$i<count($value);$i++){
                    $newArray[$i][$key]=$value[$i];
      
              }
          }
      }
      

      【讨论】:

      • 是的,没错,但我们误解了。我不想让 $_POST 看起来像你发送给我的。每个字段(例如日期、收入、税收)都应该与索引准确连接(就像我在第一篇文章中发送的那个结构)。编辑:对不起,伙计……我刚刚恢复了理智……你是对的。这应该可以解决问题(关于那个 foreach 循环)。
      • 看看最终循环......你必须在某处重组数据......最容易在 php 中完成,但可以在 javascript 中完成
      • 我发现了类似的东西: ("#selector).map(function(){return $(this).val();}).get(); 这将返回类似 charlietfl 的结构说没有使用 serialize()。在 php 中我会处理的。
      • 该映射不会创建键/值...必须创建一个包含数组和代码的 javascript 对象,就像使用我给你的 php 循环一样容易完成
      • 我是用 map 函数做的,它确实创建了键和值,我的意思是它看起来像:[date] => Array ([0] => 2012-12-04 [1] => 2012-12-06 ) [收入] => 数组 ([0] => 5000 [1] => 2500)
      猜你喜欢
      • 2021-12-28
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多