PHP - 如何将数组从(键,值)转换为(键,值,值)?

时间:2013-11-09 23:19:37

标签: php arrays

我在HTML文件中有一个表,使用下面的代码我已经设法将此表中的所有值都作为数组。

问题是我的CODE使Array成为:(Key - > Value)(Key - > 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编程代码是什么?

更新

我找到了一个例子,看起来就像我需要的那样。但是我如何在上面的CODE中使用它呢?

示例:

$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
        )
)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我不确定你要做什么,但我认为你正在寻找地图功能 http://php.net/manual/de/function.array-map.php