提取基于另一个单元格的值从表单元格的值 [英] Extract cell value from table based on another cells value

查看:128
本文介绍了提取基于另一个单元格的值从表单元格的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HTML文件:
     http://www.arifoorum.com/test/html.htm

我得到simplehtmldom库这个网站的内容:

I got this html contents with simplehtmldom library:

array(66) {
  [0]=>
  array(14) {
    [0]=>
    string(4) "Item"
    [1]=>
    string(11) "Date, time:"
    [2]=>
    string(8) "mõõdikud"
    [3]=>
    string(6) "Name 2"
    [4]=>
    string(6) "Name 3"
    [5]=>
    string(9) "Meter ID:"
    [6]=>
    string(6) "V_HeEn"
    [7]=>
    string(6) "U_HeEn"
    [8]=>
    string(3) "V_V"
    [9]=>
    string(3) "U_V"
    [10]=>
    string(6) "V_InTe"
    [11]=>
    string(6) "U_InTe"
    [12]=>
    string(6) "V_OuTe"
    [13]=>
    string(6) "U_OuTe"
  }
  [1]=>
  array(14) {
    [0]=>
    string(1) "1"
    [1]=>
    string(19) "24.01.2013 22:23:33"
    [2]=>
    string(9) "Meter 002"
    [3]=>
    string(6) " "
    [4]=>
    string(6) " "
    [5]=>
    string(8) "40380040"
    [6]=>
    string(6) " "
    [7]=>
    string(6) " "
    [8]=>
    string(6) " "
    [9]=>
    string(6) " "
    [10]=>
    string(6) " "
    [11]=>
    string(6) " "
    [12]=>
    string(6) " "
    [13]=>
    string(6) " "
  }
  [2]=>
  ...
  }
}

全部输出: http://www.arifoorum.com/test/test.php

我如何从数组获取某些元素?

例如:可以说,我希望值,其中mõõdikud= 01 名称2 =库尔姆(这应该是72114)。

For example: lets say i want value where mõõdikud = 01 and name 2 = külm (that should be 72,114) .

感谢

推荐答案

这可能是其他用户是有用的,所以我做了一个小功能,从表中获取一个单元格的值,根据条件的其他细胞值( ):

This could be useful for other users, so I made a little function that gets the value of a cell from a table, based on values of other cells (conditions):

function getCellValue(DOMElement $table, $cellName = null, array $conditions = array()){

  // get all table rows
  $trs = $table->getElementsByTagName('tr');  

  // assume first TR is the table header
  $head = $trs->item(0);

  // find cell names and their index
  $keys = array();
  foreach($head->childNodes as $th)
    if(!($th instanceof DomText))
      $keys[] = trim($th->nodeValue);

  if($invalidKeys = array_diff(array_keys($conditions), $keys))
    throw new Exception(sprintf('Non-extistent key(s) in table: ', implode(', ', $invalidKeys)));

  // find the row that meets all conditions
  $targetRow = null;
  foreach($table->childNodes as $tr){

    // internal counter because we can't rely on DOM index
    $idx = 0;
    foreach($tr->childNodes as $td){

      if($td instanceof DomText)
        continue;

      $value = trim($td->nodeValue);

      // check if all conditions match
      if(array_key_exists($keys[$idx], $conditions))
        $targetRow = ($value != $conditions[$keys[$idx]]) ? null : $tr;

      $idx++;    
    }

    // stop if we found a match
    if($targetRow)
      break;
  }

  if(!$targetRow)
    throw new Exception('No row matches your conditions');

  // build an array with row cells
  $values = array();
  $idx = 0;
  foreach($targetRow->childNodes as $td)
    if(!($td instanceof DomText))
      $values[$keys[$idx++]] = trim($td->nodeValue);

  // return the cell value if a specific cell was requested
  if($cellName !== null)
    return isset($values[$cellName]) ? $values[$cellName] : null;

  // otherwise return all values from the matched row
  return $values;
}

它使用 的DomDocument ,因为问题没有标记为 simplehtmldom

@OP:你的情况,你会使用它像:

@OP: in your case you would use it like:

$html = file_get_contents('http://www.arifoorum.com/test/html.htm');

$dom = new DomDocument();
$doc->preserveWhiteSpace = false;
$dom->loadHtml($html);

$table = $dom->getElementsByTagName('table')->item(0);

print getCellValue($table, 'V_V', array(
  'mõõdikud' => '01',
  'Name 2'   => 'külm',
));

这篇关于提取基于另一个单元格的值从表单元格的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆