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

如果您没有猜到,它们是轮胎尺寸。我需要将前三个值分解为不同的关系菜单:Trye Width / Sidewall / Rim

我计算出,如果我使用:

$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]),但是这些值并不明显,当然我还没有达到它们在菜单中是相关的。

我的方法正确吗?一定有更好的方法吗?有人可以帮忙。我很高兴奖励正确的答案,当然其他人也可以从中受益,这就是重点!!

提前致谢

斯图

4

3 回答 3

2

你的方法是正确的。请注意,您可以使用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);
于 2010-11-02T09:08:40.493 回答
0

另一种方法是正则表达式,但我不推荐它,因为它相当资源“吃”,你可以做的是爬上数组并在它爬升时使用函数命名数组作为 first,next,end

您可以在 php.net/next alt 中找到不同的函数行为。php.net/函数名

ps 希望对你有帮助

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

等继续攀登数组并根据需要命名它们,如果没有更多可获取的,则返回 false

于 2010-11-02T08:55:03.700 回答
0

您可以使用“array_unique”函数从数组中删除重复元素。

于 2010-11-02T09:51:40.873 回答