J'ai un champ Wordpress ACF comme celui-ci:
<?php $str1 = get_field('price'); $str2 = substr( $str1, 0, -4 ); echo $str2; ?>
Le résultat est le suivant:
250000
Cela fonctionne très bien, mais j'ai problème lorsque je mets deux valeurs dans le backend Wordpress, le résultat est comme ceci:
250000 15000
Ce que j'essaie de réaliser, c'est que je ne produit que la première valeur sur le frontend. L'idée est d'y parvenir:
25000
J'essaie quelque chose comme ceci:
<?php the_field('price'); ?>
Je sais que ce n'est pas une solution, puis-je le faire avec Regex ou quelqu'un peut-il m'aider avec ça? Je suis nouveau sur PHP
6 Réponses :
$value= explode(" ",$price); $last = $value[0]; It will work even if you put 3 or more, it will always bring the first one keeping space as the separator.
@cale_b vous avez raison, exploser placerait la même valeur à 0 index s'il n'y a pas d'espace. mis à jour ma réponse
ceci: DOC
$outPut = '25000 15000'; $firstNumber = explode(' ', $outPut)[0];
exploser ()
une fois
Je l'ai explosé une fois, le second est juste pour info: D
Solution sur une seule ligne, divisez la chaîne en un tableau de chaînes, puis récupérez le premier élément du tableau, en utilisant l'opérateur de fusion nul (php 7+) pour éviter les avis d'index non définis.
return explode(' ', get_field('price'))[0] ?? null;
p>
Astuce: opérateur de fusion nul est PHP 7 + ... . Sur lequel vous devriez être ... PHP 5.6 n'a pas reçu de mises à jour de sécurité depuis décembre 2018 ...
Ceci est votre variable.
$ price = the_field ('price'); // qui a la valeur 250000 15000
Ensuite, en utilisant la fonction d'explosion de php, vous pouvez obtenir la première valeur.
$ priceSeperated = exploser ('', $ price );
$ priceSeperated = array_map ('trim', $ priceSeperated);
Ensuite, vérifiez la valeur par var_dump ou print_r p>
var_dump ($ priceSeperated);
Votre sortie sera comme ceci.
array(3) { [0]=> string(3) "250000" [1]=> string(3) "15000" }
Il se transformera en un tableau, en utilisant la fonction d'explosion , Donc, pour obtenir votre première valeur, vous pouvez l'obtenir comme ceci $ priceSeperated [0]
pour la deuxième valeur $ priceSeperated [1]
, de même si vous avez plus de valeurs. p>
Note: la fonction d'explosion va exploser toutes les valeurs après chaque espace.
Il existe une autre fonction PHP strtok () , un exemple est donné dans d'autres réponses. mais explode () est beaucoup plus rapide que strtok (). (Presque 5 fois plus rapide dans les petites chaînes également).
Si vous avez une solution critique d'utilisation de la mémoire, vous devez garder à l'esprit que la fonction strtok contient le paramètre de chaîne d'entrée (ou une référence à celui-ci?) En mémoire après utilisation.
Bonne utilisation du trim
. Vous ne pouvez jamais compter sur les éditeurs de contenu pour ne pas avoir d'espaces parasites!
Il y a tellement de solutions pour obtenir sa valeur que vous pouvez obtenir en utilisant regex
comme:
$str1 = '250000 15000'; echo strtok($str1, " "); //250000
La deuxième solution est strtok ()
qui est plus rapide que vers preg_match ()
$str1 = '250000 15000'; preg_match('/\w+/', $str1, $result); // Test echo $result[0]; //250000
Explode ()
est une autre option, qui a déjà été publié dans d'autres réponses.
Toujours apprendre des gens sur SO - jamais entendu parler ou utilisé strtok avant cela! Agréable!
Toutes les solutions présentées jusqu'à présent reposent sur une entrée valide dans le champ ACF.
Que faire si le champ est vide?
Qu'est-ce qu'une personne met dans des espaces supplémentaires, comme «2500 1500»
?
Que faire si vous voulez la deuxième, troisième ou quatrième valeur?
Bien que les one-liners soient agréables, les fonctions peuvent être tout aussi agréables.
function get_price( $price, $which = 0 ) { // explode on spaces $price = explode( ' ', $price ); // // get rid of all extra spaces, such as in ' 2500 1500 ' $price = array_filter( $price ); // checks if the requested key exists, and returns it return ( array_key_exists( $which, $price ) ) ? $price[ $which ] : 0; } // usage: echo get_price( ' 2500 1500 ', 0 ); // returns 2500 echo get_price( '2500 1500 ', 1 ); // returns 1500 echo get_price( '2500', 1 ); // returns 0 echo get_price( '2500 1500 1000 500', 3 ); // returns 500
p >
belle et meilleure modification mais regex
et strtok
généreront la première occurrence. mon vote pour toi :)
@devpro - d'accord, regex est encore mieux, mais je considérais le commentaire d'OP comme un "PHP débutant" - les expressions régulières peuvent être difficiles pour les débutants (elles l'étaient pour moi!)
oui, vous avez raison, en fait OP a également mentionné comment puis-je faire avec regex
en question. c'est bien qu'un débutant veut apprendre ça :)
Pendant que vous obtenez la réponse à votre question spécifique, je pense qu'une solution plus «racine» serait d'explorer différents types de champs avec ACF. ACF prend en charge une RICHE variété de types de champs, leur accès, etc.