繁体   English   中英

匹配数组值(PHP数组)

[英]Matching array value (PHP Array)

输入帖子:

$_POST['dateSlot']
$_POST['timeStart']
$_POST['timeEnd']
$_POST['quota']

这些输入内容将生成以下数组。

Array
(
    [dateSlot] => Array
        (
            [0] => 2018-04-05
            [1] => 2018-04-05
            [2] => 2018-04-05
        )

    [timeStart] => Array
        (
            [0] => 11:06 AM
            [1] => 10:06 AM
            [2] => 9:06 AM
        )

    [timeEnd] => Array
        (
            [0] => 11:06 AM
            [1] => 9:06 AM
            [2] => 7:06 AM
        )

    [quota] => Array
        (
            [0] => 12
            [1] => 10
            [2] => 10
        )
)

我试图让他们匹配索引键,并以此想法形成另一个数组。 不确定是否可以获取我想要的值:

foreach ($_POST['dateSlot'] as $k => $val) {
    foreach ($_POST['timeStart'] as $k2 => $val2) {
        foreach ($_POST['timeEnd'] as $k3 => $val3) {
            foreach ($_POST['quota'] as $k4 => $val4) {
                if($k == $k2 && $k == $k3 && $k == $k4){
                    $timeslots[$k]['date_slot'] = $val;
                    $timeslots[$k]['time_start'] = $val2;
                    $timeslots[$k]['time_end'] = $val3;
                    $timeslots[$k]['event_quota'] = $val4;
                }
            }
        }
    }
}

通过该foreach,我得到了date_slottime_starttime_endevent_quota的错误字符串偏移量错误。

基于数组中的行,我的目标是重新形成数组,以便将它们全部组合在一起以形成3行。

范例:

Array
(
    [0] => Array
        (
            [date_slot]   => 2018-04-05
            [time_start]  => 11:06 AM
            [time_end]    => 11:06 AM
            [event_quota] => 12
        )

    [1] => Array
        (
            [date_slot]   => 2018-04-05
            [time_start]  => 10:06 AM
            [time_end]    => 9:06 AM
            [event_quota] => 10
        )

    [2] => Array
        (
            [date_slot]   => 2018-04-05
            [time_start]  => 9:06 AM
            [time_end]    => 7:06 AM
            [event_quota] => 10
        )
)

无需事先知道键名即可对此类数据进行分组的另一种方法。

通过使用第一行的数据current( $data )作为主迭代器,然后通过将外键array_keys( $data )和内列值array_column( $data, $column )array_combine()结合起来,构建一个数组组合两个键数组和一个值数组,以使每行的最终数组结构以列名为键。

这绝对依赖于具有相同元素数量的每个多维数组。 因此,这不适用于其中具有复选框输入的表单。 在这一点上,我建议使用name="row[0][ColumnName]"作为您的name属性,而无需进行此数组处理。


$data = array(
  'Column-1'=>array('Row-1a','Row-2a','Row-3a'),
  'Column-2'=>array('Row-1b','Row-2b','Row-3b'),
  'Column-3'=>array('Row-1c','Row-2c','Row-3c')
);

$array = array();

foreach( array_keys( current( $data ) ) as $column )
{
  $array[] = array_combine( array_keys( $data ), array_column( $data, $column ) );
}

print_r( $array );

产生

Array
(
    [0] => Array
        (
            [Column-1] => Row-1a
            [Column-2] => Row-1b
            [Column-3] => Row-1c
        )

    [1] => Array
        (
            [Column-1] => Row-2a
            [Column-2] => Row-2b
            [Column-3] => Row-2c
        )

    [2] => Array
        (
            [Column-1] => Row-3a
            [Column-2] => Row-3b
            [Column-3] => Row-3c
        )

)

如果您知道所有这四个post变量中的元素键将始终与一个时隙元素相关联,那么我认为这对您有用:

foreach ($_POST['dateSlot'] as $key => $value) {
    $timeslots[$key] = [
        'date_slot'   => $_POST['dateSlot'][$key],
        'time_start'  => $_POST['timeStart'][$key],
        'time_end'    => $_POST['timeEnd'][$key],
        'event_quota' => $_POST['quota'][$key],
    ];
}

print_r($timeslots);
$dateSlot = $_POST['dateSlot']
$timeStart = $_POST['timeStart']
$timeEnd = $_POST['timeEnd']
$quota = $_POST['quota']

$all = array();

foreach($dateSlot as $key => $date) {
    $all[] = array(
       "data_slot" => $dateSlot[$key],
       "time_start" => $timeStart[$key],
       "time_end" => $timeEnd[$key],
       "quota"    => $quota[$key]
    ) 
}

输入

$array = array(
            'dateSlot' => array('2018-04-05','2018-04-05','2018-04-05'),
            'timeStart' => array('11:06 AM','10:06 AM','9:06 AM'),
            'timeEnd' => array('11:06 AM','9:06 AM','7:06 AM'),
            'quota' => array(12,10,10)
        );

$new = array();
for($i=0;$i<count($array['dateSlot']);$i++){
    $new[] = array(
        'dateSlot' => $array['dateSlot'][$i],
        'timeStart' => $array['timeStart'][$i],
        'timeEnd' => $array['timeEnd'][$i],
        'event_quota' => $array['quota'][$i],
    );
}

echo "<pre>";print_r($new);

产量

Array
(
    [0] => Array
        (
            [dateSlot] => 2018-04-05
            [timeStart] => 11:06 AM
            [timeEnd] => 11:06 AM
            [event_quota] => 12
        )

    [1] => Array
        (
            [dateSlot] => 2018-04-05
            [timeStart] => 10:06 AM
            [timeEnd] => 9:06 AM
            [event_quota] => 10
        )

    [2] => Array
        (
            [dateSlot] => 2018-04-05
            [timeStart] => 9:06 AM
            [timeEnd] => 7:06 AM
            [event_quota] => 10
        )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM