2013-11-09 128 views
0

我有一个HTML文件中的表格,使用下面的代码我已经设法从该表中获取所有值作为数组。 (Key - > Value)(Key - > Value)。但我的数据的结构是:(键 - >价值,价值)(键 - >价值,价值)PHP - 如何将数组从(Key,Value)转换为(Key,Value,Value)?

这里的内容:使用此代码来获取内容myHTMLfile.html

<td height="22" align="center" bgcolor="#FFFFFF">1 Hour </td> 
<td align="center" bgcolor="#FFFFFF">400 USD</td> 
<td align="center" bgcolor="#FFFFFF">450 USD</td> 
<td height="22" align="center" bgcolor="#FFFFFF">2 Hours</td> 
<td align="center" bgcolor="#FFFFFF">500 USD</td> 
<td align="center" bgcolor="#FFFFFF">600 USD</td> 
<td height="22" align="center" bgcolor="#FFFFFF">3 Hours </td> 
<td align="center" bgcolor="#FFFFFF">600 USD</td> 
<td align="center" bgcolor="#FFFFFF">700 USD</td> 

林使这个数组:

$file = ("myHTMLfile.html"); 
$searchfor = 'align="center" bgcolor="#FFFFFF"';      

header('Content-Type: text/html'); 
$html = file_get_contents($file); 

$pattern = preg_quote($searchfor, '/'); 
$pattern = "/^.*$pattern.*\$/m"; 
if(preg_match_all($pattern, $html, $matches)); 

function remap_alternating(array $values) { 
    $remapped = array(); 
    for($i = 0; $i < count($values) - 1; $i += 2) { 

$remapped[strip_tags(trim($values[$i]))] = strip_tags(trim($values[$i + 1])); 
    } 
    return $remapped; 
} 
$mapped = remap_alternating($matches[0]); 
// RAM 
$keys = array_map("trim", array_map("strip_tags", array_keys($mapped))); 
$values = array_map("trim", array_map("strip_tags", array_values($mapped))); 
$mapped = array_combine($keys, $values); 

下面你可以看到从var_dump($mapped);

array(4) { 
    ["1 Hour"]=> 
    string(7) "400 USD" 
    ["450 USD"]=> 
    string(7) "2 Hours" 
    ["500 USD"]=> 
    string(7) "600 USD" 
    ["3 Hours"]=> 
    string(7) "600 USD" 
} 
结果我得到

我想这个阵列结果看起来像:

array(3) { 
    ["1 Hour"]=> 
    string(16) "400 USD, 450 USD" 
    ["2 Hours"]=> 
    string(16) "500 USD, 600 USD" 
    ["3 Hours"]=> 
    string(7) "600 USD" 
} 

我的问题是:什么是正确的PHP编程代码来获取结果我想要的吗?

修订BELOW

我发现了一个例子,它看起来像它我需要什么。但是,我如何使用它与我的代码上面?

例子:

$get = "first=value1&second=value2&third=value3"; 

print_r(array_map2("explode","=",explode("&",$get))); 

会打印出:

Array 
(
    [0] => Array 
     (
      [0] => first 
      [1] => value1 
     ) 

    [1] => Array 
     (
      [0] => second 
      [1] => value2 
     ) 

    [2] => Array 
     (
      [0] => third 
      [1] => value3 
     ) 
) 
+0

一个正确的PHP代码是一个正常的PHP代码 –

+0

@RoyalBg:真棒..它看起来像什么? ;-) – Cyborg

+0

它看起来像'<?php'标签中的任何其他PHP代码,变量,函数等。现在,严肃地说,你没有表现出解决你的问题的努力。给我们提供信息旁边的信息,你是如何得到数组的,你是如何尝试改变它的。我们可能会帮助你 –

回答

1

试试这个:

function remap_alternating(array $values) { 
    $remapped = array(); 
    for($i = 0; $i < count($values) - 1; $i += 3) { 
    $remapped[strip_tags(trim($values[$i]))] = array(strip_tags(trim($values[$i + 1])), strip_tags(trim($values[$i + 2]))); 
    } 
    return $remapped; 
} 
+0

您的代码几乎是正确的,但它会导致1个问题。我在第34行得到错误。第34行:'$ values = array_map(“trim”,array_map(“strip_tags”,array_values($ mapped)));'。我需要这行或其他一些函数来TRIM空格。使用你的代码,每一件事看起来都不错,除了这个包含空白:'[“1 Hour”] =>'但'[“2 Hours”] =>'看起来不错。如何解决这个问题?谢谢 – Cyborg

+1

你应该切换trim和striptags: – Aladdin

+1

$ remapped [trim(strip_tags($ values [$ i]))] = array(trim(strip_tags($ values [$ i + 1])),trim(strip_tags( $ values [$ i + 2]))); – Aladdin