数组的问题:注意:未定义的偏移量:0

Posted

技术标签:

【中文标题】数组的问题:注意:未定义的偏移量:0【英文标题】:Problems with arrays: Notice: Undefined offset: 0 【发布时间】:2018-10-03 01:57:34 【问题描述】:

我得到了这个 php 代码,我正在尝试将 html 表转换为数组,然后进行 mysqli 查询,但我不知道如何

我有这个变量$aDataTableDetailHTML[][],其中第一个[] 是表中带有td 的tr 的数量,第二个[] 是它们各自trtd

<?php
$htmlContent = file_get_contents("FrmClientes.php");

    $DOM = new DOMDocument();
    @$DOM->loadHTML($htmlContent);

    $Header = $DOM->getElementsByTagName('th');
    $Detail = $DOM->getElementsByTagName('td');

//#Get header name of the table
    foreach($Header as $NodeHeader) 
    
            $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
    
    //print_r($aDataTableHeaderHTML); die();

    //#Get row data/detail table without header name as key
    $i = 0;
    $j = 0;
    foreach($Detail as $sNodeDetail) 
    
            $aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);
            $i = $i + 1;
            $j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;
    
    //print_r($aDataTableDetailHTML); die();
//print_r($aDataTableDetailHTML[0][3]); die();

    //#Get row data/detail table with header name as key and outer array index as row number
    for($i = 0; $i < count($aDataTableDetailHTML); $i++)
    
            for($j = 0; $j < count($aDataTableHeaderHTML); $j++)
            
                    $aTempData[$i][$aDataTableHeaderHTML[$j]] = $aDataTableDetailHTML[$i][$j];
            
    
    $aDataTableDetailHTML = $aTempData; unset($aTempData);
    //print_r($aDataTableDetailHTML); die();

    //print_r($aDataTableDetailHTML[0][0]); die();

    $CON = mysqli_connect("localhost","root","","BDfactura") or die ("error");

    $cadena = "INSERT INTO ItemXVenta (NroVenta, IdArticulo, Cantidad, ValorVenta) VALUES ";

    for($k=0; $k < count($aDataTableDetailHTML); $k++)
    
        $cadena.="('".null."', '".$aDataTableDetailHTML[$k][0]."', '".$aDataTableDetailHTML[$k][3]."', '".$aDataTableDetailHTML[$k][2]."'),";
    

    echo json_encode(array('cadena' => $cadena));


?>

这是 HTML 代码

<div class="table-responsive" id="adicionados">          
<table class="table" id="tabla">
<thead>
  <tr>
    <th>ID Articulo</th>
    <th>Descripcion</th>
    <th>Valor Venta</th>
    <th>Cantidad</th>
    <th>Subtotal</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td id="Sid">ID</td>
    <td id="Sdescripcion">Descripcion</td>
    <td id="Svlrventa">VLR</td>
    <td id="Scantidad">CANTIDAD</td>
    <td id="Ssubtotal">TOTAL</td>
  </tr>
  <tr>
    <td id="Sid">dw</td>
    <td id="Sdescripcion">ads</td>
    <td id="Svlrventa">ads</td>
    <td id="Scantidad">da</td>
    <td id="Ssubtotal">ad</td>
  </tr>

</tbody>
</table>
</div>

这是输出

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 0 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 3 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 2 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 0 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 3 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

注意:未定义的偏移量:/opt/lampp/htdocs/ProyectoClasesPHP 中的 2 2018 年 11 月 4 日/Guardar Factura.php 第 48 行

"cadena":"INSERT INTO ItemXVenta (NroVenta, IdArticulo, Cantidad, ValorVenta) VALUES ('', '', '', ''),('', '', '', ''),"

【问题讨论】:

如果要消除错误,检查isset() PHP: "Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset"的可能重复 对变量执行var_dump() 并检查它实际包含的内容。 @SivaGanesh,怎么样? 我只是发布我的答案 【参考方案1】:

检查错误行中的 Isset。 isset()函数用于检查变量是否被设置。如果测试变量包含NULL值,isset()函数返回false。

   for($i = 0; $i < count($aDataTableDetailHTML); $i++)
    
            for($j = 0; $j < count($aDataTableHeaderHTML); $j++)
            
                if(isset($aDataTableDetailHTML[$i][$j]))
                    $aTempData[$i][$aDataTableHeaderHTML[$j]] = $aDataTableDetailHTML[$i][$j];
                
            
    

【讨论】:

我得到了这个输出: "cadena":"INSERT INTO ItemXVenta (NroVenta, IdArticulo, Cantidad, ValorVenta) VALUES " 我使用了一个 var_dump() 并且输出是这样的:array(2) [0]=> array(5) ["ID Articulo"]=> string(2) "ID" ["Description"]=> string(11) "Descripcion" ["Valor Venta"]=> string( 3) "VLR" ["Cantidad"]=> string(8) "CANTIDAD" ["Subtotal"]=> string(5) "TOTAL" [1]=> array(5) ["ID Articulo"] => string(2) "dw" ["Description"]=> string(3) "ads" ["Valor Venta"]=> string(3) "ads" ["Cantidad"]=> string(2) " da" ["Subtotal"]=> string(2) "ad" 我很害怕 D: 你能告诉我,你想要什么输出 "cadena":"INSERT INTO ItemXVenta (NroVenta, IdArticulo, Cantidad, ValorVenta) VALUES ('null', 'ID', 'CANTIDAD', 'VLR'),('null', 'dw', 'da', 'ads')," 基于 HTML 表格 祝你有美好的一天 你能分享你的解决方案吗【参考方案2】:

我解决了问题,固定代码如下:

<?php
$htmlContent = file_get_contents("FrmClientes.php");

    $DOM = new DOMDocument();
    @$DOM->loadHTML($htmlContent);

    $Header = $DOM->getElementsByTagName('th');
    $Detail = $DOM->getElementsByTagName('td');

//#Get header name of the table
    foreach($Header as $NodeHeader) 
    
            $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
    
    //print_r($aDataTableHeaderHTML); die();

    //#Get row data/detail table without header name as key
    $i = 0;
    $j = 0;
    foreach($Detail as $sNodeDetail) 
    
            $aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);
            $i = $i + 1;
            $j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;
    
    //print_r($aDataTableDetailHTML); die();
//print_r($aDataTableDetailHTML[0][3]); die();

    //#Get row data/detail table with header name as key and outer array index as row number
    for($i = 0; $i < count($aDataTableDetailHTML); $i++)
    
            for($j = 0; $j < count($aDataTableHeaderHTML); $j++)
            
                    $aTempData[$i][$aDataTableHeaderHTML[$j]] = $aDataTableDetailHTML[$i][$j];
            
    
    $aDataTableDetailHTML = $aTempData; unset($aTempData);
    //print_r($aDataTableDetailHTML); die();

    //print_r($aDataTableDetailHTML[0][0]); die();

    $CON = mysqli_connect("localhost","root","","BDfactura") or die ("error");

    $cadena = "INSERT INTO ItemXVenta (NroVenta, IdArticulo, Cantidad, ValorVenta) VALUES ";

    for($k=0; $k < count($aDataTableDetailHTML); $k++)
    
        $cadena.="('".null."', '".$aDataTableDetailHTML[$k]["ID Articulo"]."', '".$aDataTableDetailHTML[$k]["Cantidad"]."', '".$aDataTableDetailHTML[$k]["Valor Venta"]."'),";
    

    echo json_encode(array('cadena' => $cadena));

//var_dump($aDataTableDetailHTML);

?>

【讨论】:

以上是关于数组的问题:注意:未定义的偏移量:0的主要内容,如果未能解决你的问题,请参考以下文章

“注意:未定义的变量”、“注意:未定义的索引”、“警告:未定义的数组键”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”、“警告:未定义的数组键”和“注意:未定义的偏移量”使用 PHP

注意:未定义的偏移量:0 in

数组检查未定义的偏移量php

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP