Как получить первое значение в PHP - PullRequest
2 голосов
/ 27 марта 2019

У меня есть выходное поле Wordpress ACF, например:

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

Результат таков:

25000

Это работает очень хорошо, однако у меня есть проблема, когда я помещаю два значения в бэкэнд Wordpress, результат выглядит так:

250000 15000

Я пытаюсь добиться того, чтобы я выводил только первое значение во внешнем интерфейсе. Идея заключается в том, чтобы добиться этого:

250000

Я пытаюсь что-то вроде этого:

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

Я знаю, что это не решение, могу ли я сделать это с Regex или кто-нибудь может мне помочь с этим? Я новичок в PHP

Ответы [ 6 ]

1 голос
/ 27 марта 2019

Все представленные решения основаны на действительном вводе в поле 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
1 голос
/ 27 марта 2019

Существует так много решений для получения значения ist, что вы можете получить, используя 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() - это еще один вариант, который уже размещен в других ответах.

1 голос
/ 27 марта 2019

Это ваша переменная.

$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 хранит входной строковый параметр (или ссылку на него?) В памяти после использования.

1 голос
/ 27 марта 2019

Решение с одной строкой, разбейте строку на массив строк и затем получите первый элемент массива, используя оператор объединения нулей (php 7+), чтобы избежать неопределенного уведомления об индексе.

return explode(' ', get_field('price'))[0] ?? null;
0 голосов
/ 27 марта 2019

это: DOC

$outPut = '25000 15000';
$firstNumber = explode(' ', $outPut)[0];
0 голосов
/ 27 марта 2019
$value= explode(" ",$price);
$last = $value[0];     

Это будет работать, даже если вы поставите 3 или больше, оно всегда принесет первое, сохраняя space в качестве разделителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...