2013-11-09 5 views
0

У меня есть таблица в файле HTML, используя мой CODE ниже. Мне удалось получить все значения из этой таблицы в виде массива.PHP - Как преобразовать массив из (Key, Value) в (Key, Value, Value)?

Проблема заключается в том, что мой код задает Array как: (Key -> Value) (Key -> Value). Но структура моих данных: (Key -> Value, 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> 

Im используя этот код, чтобы получить содержание и сделать этот массив:

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

Правильный PHP-код является рабочим –

+0

@RoyalBg: Awesome .. С чем это выглядит? ;-) – Cyborg

+0

Он выглядит как любой другой 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

Ваш код почти прав, но он делает одну проблему. Я получаю ОШИБКУ на ЛИНИИ 34.LINE 34: '$ values ​​= array_map (" trim ", array_map (" strip_tags ", array_values ​​($ mapped)));'. Мне нужна эта строка или какая-то другая функция для пробелов TRIM. Используя свой КОД, каждая вещь выглядит хорошо, за исключением того, что она содержит пробелы: '[" 1 Hour "] =>' but '[" 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

Смежные вопросы