我已经输出了Wordpress ACF字段,如下所示:
<?php the_field('price'); ?>
结果是这样的:
25000
效果很好,但是当我在Wordpress后端中放置两个值时出现问题,结果是这样的:
250000 15000
我要实现的目标是仅在前端输出第一个值。想法是实现这一目标:
250000
我尝试这样的事情:
<?php $str1 = get_field('price'); $str2 = substr( $str1, 0, -4 ); echo $str2; ?>
我知道这不是解决方案,我可以使用正则表达式来解决吗,或者有人可以帮助我吗?我是PHP新手
答案 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];