使用多维数组并在新结构中使用它们

问题描述 投票:0回答:2

我有这个由CSV输入填充的表单,用户需要为他想要使用的列分配一个标题。用户还可以禁用他不想处理的行。

这是我的CSV

Klant;Klantref;Posnr.;Aantal;Dikte;Kwaliteit
Client;;60-017-301;8;10;S355
Client;;60-117-301;4;10;S355
Client;;60-031-302;2;20;S355
Client;;60-131-401;4;15;S355

这是形式:

$check_upload = glob('uploads/temp_dropzone/'.$_SESSION['user_id'].'_'.$upload_key.'_*.*');

echo'
<table class="table">
    <thead>';

    //head
    foreach($check_upload as $val)
    {
        $file = fopen($val,'r');

        $data_1 = fgetcsv($file);

        echo'<tr>';

        foreach ($data_1 as $index => $val_1)
        {
            $data_2 = explode(';', $val_1);

                echo '<th><input type="text" class="form-control no-border input-sm" id="calc_import['.$y.'][]" name="calc_import[]" value="Import: ja - nee" style="text-align: center" readonly="readonly"></th>';

            for($y = 1; $y <= count($data_2); $y++)
            {
                echo '<th>
                      <select class="form-control no-border input-sm" id="calc_header['.$y.'][]" name="calc_header[]">
                        <option value="">Kies type waarde</option>
                        <option value="aantal">Aantal</option>
                        <option value="omschr_1">Omschrijving 1</option>
                        <option value="omschr_2">Omschrijving 2</option>
                        <option value="omschr_3">Omschrijving 3</option>
                        <option value="prijs">Prijs</option>
                        <option value="opmerking">Opmerking</option>
                      </select>
                  </th>';
            }
        }
        echo'</tr>';

        fclose($file);
    }
    echo'
    </thead>
    <tbody>';

    // body
    foreach($check_upload as $val)
    {
        $file = fopen($val,'r');

        while($data_1 = fgetcsv($file))
        {
            $z++;

            echo'<tr>';

            foreach ($data_1 as $index => $val_1)
            {
                $data_2 = explode(';', $val_1);

                echo '<td align="center"><input type="radio" id="calc_import['.$z.'][]" name="calc_import['.$z.'][]" value="ja" checked> <input type="radio" id="calc_import['.$z.'][]" name="calc_import['.$z.'][]" value="nee"></td>';

                foreach ($data_2 as $index => $val_2)
                {
                    echo '<td><input type="text" class="form-control no-border input-sm" id="calc_body['.$z.'][]" name="calc_body['.$z.'][]" value="'.$val_2.'" readonly="readonly"></td>';
                }
            }

            echo '</tr>';
        }

        fclose($file);      
        unlink($val);
    }

    echo'
  </tbody>
</table>

表格填写如下:

到现在为止还挺好 :)

当我用$ _POST和print_r($ _ POST)发送表单时;这是创建数组

Array ( [dossier_id] => 9111 [calc_import] => Array ( [0] => Import: ja - nee [1] => Array ( [0] => nee ) [2] => Array ( [0] => ja ) [3] => Array ( [0] => ja ) [4] => Array ( [0] => ja ) [5] => Array ( [0] => ja ) ) [calc_header] => Array ( [0] => [1] => [2] => omschr_1 [3] => aantal [4] => omschr_2 [5] => omschr_3 ) [calc_body] => Array ( [1] => Array ( [0] => Klant [1] => Klantreferentie [2] => Posnr. [3] => Aantal [4] => Dikte [5] => Kwaliteit ) [2] => Array ( [0] => Client [1] => [2] => 60-017-301 [3] => 8 [4] => 10 [5] => S355 ) [3] => Array ( [0] => Client [1] => [2] => 60-117-301 [3] => 4 [4] => 10 [5] => S355 ) [4] => Array ( [0] => Client [1] => [2] => 60-031-302 [3] => 2 [4] => 20 [5] => S355 ) [5] => Array ( [0] => Client [1] => [2] => 60-131-401 [3] => 4 [4] => 15 [5] => S355 ) ) ) 

现在需要创建一个表,其中我有一个列'Aantal',Omschrijving等。所以我开始在数组中找到它们的键:

echo 'Aantal: '.array_search('aantal', $_POST['calc_header']);
echo '<br>';
echo 'Omschr_1: '.array_search('omschr_1', $_POST['calc_header']);
echo '<br>';
echo 'Omschr_2: '.array_search('omschr_2', $_POST['calc_header']);
echo '<br>';
echo 'Omschr_3: '.array_search('omschr_3', $_POST['calc_header']);
echo '<br>';
echo 'Prijs: '.array_search('prijs', $_POST['calc_header']);
echo '<br>';
echo 'Opmerking: '.array_search('opmerking', $_POST['calc_header']);

但现在呢?我希望导入时ja(是)的所有行的变量都被处理为

但是我现在陷入困境,看到很多代码,我不知道;确定阵列是否具有正确的结构。

请帮忙,阵列结构是否正确以及如何从这里开始?

php html arrays
2个回答
1
投票

这段代码应该有帮助,我在代码中包含了注释,试图指出每个项目的作用......

$_POST["calc_import"] = Array ( 0 => "Import: ja - nee",
         1 => Array ( "0" => "nee" ),
         2 => Array ( "0" => "ja" ),
         3 => Array ( "0" => "ja" ),
         4 => Array ( "0" => "ja" ),
         5 => Array ( "0" => "ja" ) );
$_POST["calc_header"] = Array ( 0 => "",
        1 => "",
        2 => "omschr_1",
        3 => "aantal",
        4 => "omschr_2",
        5 => "omschr_3" );

// This is where the code decides the positions of each column 
// (you already do this - just store this for the processing)
$columnPositions = [3, 2, 4, 5, "", ""]; 
$fileName = "a.txt";
$import = fopen($fileName, "r");
// rowNumber is the match to check if this row is output
$rowNumber = 1;
$output = [];
while ( $rowData = fgetcsv($import, null, ";")) {
    // Is this row to be exported?
    if ( $_POST["calc_import"][$rowNumber][0] == "ja" )    {
        $newOut = [];
        // Build up the output from the column positions
        foreach ( $columnPositions as $extractColumn )  {
            // Only output columns which have a position (i.e. non blank)
            if ( $extractColumn )  {
                $newOut[] = $rowData[$extractColumn];
            }
        }
        $output[] = $newOut;
    }
    // Increment row number
    $rowNumber++;
}
fclose($import);     
print_r($output);

基础是采用您已有的列排序并将其转换为要提取的数据列的选择列表。每次从文件中读取一行时,首先检查是否要处理该行,然后对每行重新排序数据(丢弃不需要的数据)并累积组合数据的输出。


0
投票

我已将输入脚本更改为

<table class="table">
    <thead>';

    //head
    foreach($check_upload as $val)
    {
        $file = fopen($val,'r');

        $data_1 = fgetcsv($file);

        echo'<tr>';

        foreach ($data_1 as $index => $val_1)
        {
            $data_2 = explode(';', $val_1);

                echo '<th><input type="text" class="form-control no-border input-sm" value="Import: ja - nee" style="text-align: center" readonly="readonly"></th>';

            for($y = 1; $y <= count($data_2); $y++)
            {
                echo '<th>
                      <select class="form-control no-border input-sm" id="calc_header['.$y.']['.$y.']" name="calc_header[]">
                        <option value="none">Kies type waarde</option>
                        <option value="aantal">Aantal</option>
                        <option value="omschr_1">Omschrijving 1</option>
                        <option value="omschr_2">Omschrijving 2</option>
                        <option value="omschr_3">Omschrijving 3</option>
                        <option value="prijs">Prijs</option>
                        <option value="opmerking">Opmerking</option>
                      </select>
                  </th>';
            }
        }
        echo'</tr>';

        fclose($file);
    }
    echo'
    </thead>
    <tbody>';

    // body
    foreach($check_upload as $val)
    {
        $file = fopen($val,'r');

        while($data_1 = fgetcsv($file))
        {
            echo'<tr>';

            foreach ($data_1 as $key_1 => $val_1)
            {       
                $z++;

                echo '<td align="center"><input type="radio" id="calc_import['.$z.']" name="calc_import['.$z.']" value="ja" checked> <input type="radio" id="calc_import['.$z.']" name="calc_import['.$z.']" value="nee"></td>';

                $data_2 = explode(';', $val_1);

                foreach ($data_2 as $key_2 => $val_2)
                {
                    echo '<td><input type="text" class="form-control no-border input-sm" id="calc_body['.$key_2.']['.$z.']" name="calc_body['.$key_2.']['.$z.']" value="'.$val_2.'" readonly="readonly"></td>';
                }
            }

            echo '</tr>';
        }

        fclose($file);      
        unlink($val);
    }

    echo'
  </tbody>
</table>

现在我能够:

$key_aantal = array_search('aantal', $_POST['calc_header']);
$key_omschr_1 = array_search('omschr_1', $_POST['calc_header']);
$key_omschr_2 = array_search('omschr_2', $_POST['calc_header']);
$key_omschr_3 = array_search('omschr_3', $_POST['calc_header']);
$key_prijs = array_search('prijs', $_POST['calc_header']);
$key_opmerking = array_search('opmerking', $_POST['calc_header']);

foreach($_POST['calc_import'] as $key => $value)
{
    if($value == 'ja')
    {
        if($key_aantal > 0) { $aantal = $_POST['calc_body'][$key_aantal][$key]; }
        if($key_aantal > 0) { $omschr_1 = $_POST['calc_body'][$key_omschr_1][$key]; }
        if($key_aantal > 0) { $omschr_2 = $_POST['calc_body'][$key_omschr_2][$key]; }
        if($key_aantal > 0) { $omschr_3 = $_POST['calc_body'][$key_omschr_3][$key]; }
        if($key_aantal > 0) { $prijs = $_POST['calc_body'][$key_prijs][$key]; }
        if($key_opmerking > 0) { $opmerking = $_POST['calc_body'][$key_opmerking][$key]; }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.