2015-03-26 3 views
0

Я использую WooCommerce и функция возвращает элемент данных в формате нижеКак получить содержимое тегов в массиве?

<dl class="variation"> 
<dt>options:</dt><dd>redwood-120mm-x-28mm</dd> 
<dt>length:</dt><dd>3.6</dd> 
<dt>linear metres:</dt><dd>500</dd> 
</dl> 

Я хочу, чтобы ввести эти данные в массив, как следующие;

array("options:" => "redwood-120mm-x-28mm", "length:"=> "3.6", "linear metres:" => "500"); 

Как это сделать?

Это функция:

global $woocommerce; 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) { 
     echo $woocommerce->cart->get_item_data($cart_item); 

    } 
} 
+0

не вы возражаете разместить вашу функцию, пожалуйста? –

+0

См. Edit, я добавил функцию – user892134

ответ

1

Вы можете сделать это с помощью регулярного выражения, может быть, вы хотите дать выстрел для DOM в PHP.

Мое объяснение содержится в комментариях к коду.

//String to parse 
$string = '<dl class="variation"> 
<dt>options:</dt><dd>redwood-120mm-x-28mm</dd> 
<dt>length:</dt><dd>3.6</dd> 
<dt>linear metres:</dt><dd>500</dd> 
</dl>'; 

//Keys, you want to find 
$keys = array('options', 'length', 'linear metres'); 

//The result array 
$result = array(); 

//Loop through the keys 
foreach ($keys as $key) { 
    //Insert the result into the result array 
    $result[$key] = getValueByKey($key, $string); 
} 

//Show results 
var_dump($result); 

function getValueByKey($key, $string) { 
    //The pattern by key 
    $pattern = '/<dt>' . $key . ':<\/dt><dd>(.*?)<\/dd>/i'; 

    //Initialize a match array 
    $matches = array(); 

    //Do the regular expression 
    preg_match($pattern, $string, $matches); 
    if (!empty($matches[1])) { 
     //If there are match, then return with it 
     return $matches[1]; 
    } 
    //Otherwise return with false 
    return false; 
} 

Выход:

array (size=3) 
    'options' => string 'redwood-120mm-x-28mm' (length=20) 
    'length' => string '3.6' (length=3) 
    'linear metres' => string '500' (length=3) 
+0

Спасибо, отлично работает! – user892134

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