Php, mysql, взрывается и массивы
Вопрос
$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», чтобы удалить дубликаты элементов из массива.