Вопрос

$query_posts = "
SELECT DISTINCT meta_value
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.ID = wpostmeta.post_id
AND wpostmeta.meta_key = 'Product'
AND wposts.post_status = 'publish'
AND wposts.post_type = 'post'
ORDER BY wposts.post_date DESC";

$result = mysql_query($query_posts) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    echo $row['meta_value'];
}

Вышесказанное производит список результатов, как показано ниже:

235/40/R18/95/ZR(Y)/XL £180.00
225/45/R17/94/W/XL £180.00
235/45/R17/97/Y/XL £180.00
245/45/R17/99/Y/XL £180.00
245/40/R17/91/Y £180.00
225/40/R18/92/W/XL £180.00
etc etc

Они размеры шин, если вы не догадались. Мне нужно сломать первые три значения в отчетливые реляционные меню: тираж / боковина / ободок

Я разработал, что если я буду использовать:

$query_posts = "
SELECT DISTINCT meta_value
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.ID = wpostmeta.post_id
AND wpostmeta.meta_key = 'Product'
AND wposts.post_status = 'publish'
AND wposts.post_type = 'post'
ORDER BY wposts.post_date DESC";
$result = mysql_query($query_posts) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    $tyres_widths = (explode("/",$row['meta_value']));
    echo ($tyres_widths[0]); 
}

Я могу получить первые ($ tyres_widths [0]), вторые ($ tyres_widths [1]) или третий столбец ($ tyres_widths [2]), но значения не различны и, конечно, у меня все еще не добрались до точки, когда Они реляционные в меню.

Является ли мой подход правильно? Там должно быть лучший метод? Может кто-то помогать. Я рад вознаграждению за правильный ответ, и, конечно, кто-то другой может выиграть, что является целым моментом !!

заранее спасибо

Stu

Это было полезно?

Решение

Другой подход был бы регулярным выражением, я бы не рекомендовал это, хотя, потому что это вполне ресурс «едят», что вы могли бы сделать, это подняться на массив и назвать массив, когда он поднимается, используя функции как первое, следующее, конец

Вы можете найти поведение различных функций на PHP.Net/Next Alt. php.net/function name.

PS Надеюсь, это помогло

$array = (explode("/",$row['meta_value']));
$tires['width']= first($array);
$tires['height']= next($array);
$tires['depth']= next($array);

и т. Д. Продолжать восхождение на массив и называть их, когда вы, пожалуйста, это возвращает false, если нет ничего больше, чтобы получить

Другие советы

Ваш подход правильный. Обратите внимание, что вы можете использовать list Чтобы «распаковать» массив:

list($width, $sidewall, $rim) = explode("/",$row['meta_value']);

Переменная названа $sidewall яснее, чем переменная с именем $tire_widths[1].

РЕДАКТИРОВАТЬ

Даже уклониться, вы можете поставить поля обратно в ассоциативный массив, используя:

list($tires['width'], 
     $tires['sidewall'], 
     $tires['rim'])      = explode("/",$row['meta_value']);

РЕДАКТИРОВАТЬ

За запрос в комментарии, чтобы создать список различных значений для конкретного поля, вам придется создать отдельный массив и использовать array_unique:

$result = mysql_query($query_posts) or die(mysql_error());
$ar_widths = array(); // setup array of widths

while($row = mysql_fetch_array($result)){
    list($width, $sidewall, $rim) = explode("/",$row['meta_value']);

    $ar_widths[] = $width; // remember width
}

$ar_widths = array_unique($ar_widths); // remove duplicates
print_r($ar_widths);

Вы можете использовать функцию «Array_Unique», чтобы удалить дубликаты элементов из массива.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top