Question

$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'];
}

Le produit ci-dessus une liste de résultats comme suit:

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

Ce sont des tailles de pneus si vous ne l'avez pas deviné. Je dois briser les trois premières valeurs dans les menus relationnels distincts: Trye Largeur / Flanc / Rim

Je travaille que si j'utilise:

$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]); 
}

Je peux obtenir la première ($ tyres_widths [0]), deuxième ($ tyres_widths [1]) ou la troisième colonne ($ tyres_widths [2]), mais les valeurs ne sont pas distinctes et bien sûr, je n'ai toujours pas à le moment où ils sont relationnelle dans les menus.

est mon approche correcte? Il doit y avoir une meilleure méthode? Quelqu'un peut-il aider. Je suis heureux de récompenser pour bonne réponse et de quelqu'un d'autre avantage bien sûr peut qui est le point entier !!

Merci à l'avance

Stu

Était-ce utile?

La solution

Une autre approche serait des expressions régulières, je ne le recommanderais pas mais parce qu'il ressource tout à fait « manger », ce que vous pouvez faire est de monter le tableau et nommez le tableau comme il monte à l'aide de fonctions d'abord, ensuite, à la fin

vous pouvez trouver le comportement des fonctions diffrent à php.net/next alt. Nom de php.net/function

p.s. il a aidé l'espoir

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

etc continuent de grimper dans le tableau et nommez-les comme bon vous retourne false s'il n'y a rien de plus pour obtenir

Autres conseils

Votre approche est correcte. Notez que vous pouvez utiliser list à « déballer » le tableau:

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

variable A nommée $sidewall est plus claire qu'une variable nommée $tire_widths[1].

EDIT

Même tidier, vous pouvez mettre les champs dos dans un tableau associatif, en utilisant:

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

EDIT

Par demande en commentaire, pour créer une liste de valeurs distinctes pour un champ spécifique, vous devrez créer un tableau séparé et l'utilisation 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);

Vous pouvez utiliser la fonction « array_unique » pour supprimer les doublons du tableau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top