2
votes

Comment obtenir la première valeur en PHP

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


1 commentaires

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.


6 Réponses :


0
votes
$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.

1 commentaires

@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



0
votes

ceci: DOC

$outPut = '25000 15000';
$firstNumber = explode(' ', $outPut)[0];


2 commentaires

exploser () une fois


Je l'ai explosé une fois, le second est juste pour info: D



1
votes

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>


1 commentaires

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 ...



1
votes

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.


1 commentaires

Bonne utilisation du trim . Vous ne pouvez jamais compter sur les éditeurs de contenu pour ne pas avoir d'espaces parasites!



1
votes

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.


1 commentaires

Toujours apprendre des gens sur SO - jamais entendu parler ou utilisé strtok avant cela! Agréable!



1
votes

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 >


3 commentaires

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 :)