如何在PHP中获得第一价值

时间:2019-03-27 13:46:00

标签: php html wordpress

我已经输出了Wordpress ACF字段,如下所示:

<?php the_field('price'); ?>

结果是这样的:

25000

效果很好,但是当我在Wordpress后端中放置两个值时出现问题,结果是这样的:

250000 15000

我要实现的目标是仅在前端输出第一个值。想法是实现这一目标:

250000

我尝试这样的事情:

  <?php $str1 = get_field('price'); $str2 = substr( $str1, 0, -4 ); echo $str2; ?>

我知道这不是解决方案,我可以使用正则表达式来解决吗,或者有人可以帮助我吗?我是PHP新手

6 个答案:

答案 0 :(得分:1)

单行解决方案,使用空合并运算符(php 7+)将字符串分成字符串数组,然后获取数组的第一个元素,以避免未定义的索引通知。

return explode(' ', get_field('price'))[0] ?? null;

答案 1 :(得分:1)

这是您的变量。

$price = the_field('price'); // which has value 250000 15000

然后使用php explode函数,您可以获得第一个值。

$priceSeperated = explode(' ', $price);

$priceSeperated = array_map('trim', $priceSeperated);

然后通过var_dump或print_r检查值

var_dump($ priceSeperated);

您的输出将是这样。

array(3) {
  [0]=>
  string(3) "250000"
  [1]=>
  string(3) "15000"
}

使用爆炸功能,它将变成一个数组,因此获取第一个值,对于第二个值$priceSeperated[0],可以像这样$priceSeperated[1]来获取它,同样,如果您有更多的值。

注意:爆炸函数将爆炸每个空格之后的所有值。

还有另一个PHP函数 strtok(),示例给出了其他答案。  但是explode()比strtok()快得多。 (在小字符串中,速度也快将近5倍。)

如果您有关键的内存使用解决方案,请记住,strtok函数在使用后会将输入字符串参数(或对其的引用?)保存在内存中。

答案 2 :(得分:1)

有很多解决方案来获得价值,您可以使用regex来获得,例如:

$str1 = '250000 15000';
preg_match('/\w+/', $str1, $result); // Test
echo $result[0]; //250000 

第二个解决方案是strtok(),它比preg_match()更快

$str1 = '250000 15000';
echo strtok($str1, " ");  //250000 

Explode()是另一个选项,已经在其他答案中发布。

答案 3 :(得分:1)

到目前为止,所有提出的解决方案都依赖于ACF字段中的有效输入

如果该字段为空怎么办?
放在' 2500 1500 '之类的多余空格中的人是什么?
如果您确实想要第二,第三或第四值怎么办?

虽然单线很好,但功能也可以一样。

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

答案 4 :(得分:0)

$value= explode(" ",$price);
$last = $value[0];     

即使您放置3个或更多,它也将起作用,它将始终使用第一个保持space的分隔符。

答案 5 :(得分:0)

此:DOC

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