Как проверить, является ли значение числом или строкой для поля с типом «символ меняется» в php? - PullRequest
0 голосов
/ 06 июня 2018

Я показываю список «мест» из таблицы «Продукты».Теперь это поле 'location' содержит либо строковое значение, либо число.Если это число, оно ссылается на идентификатор таблицы 'free_shipping_locations', а если это строка, оно ссылается на поле местоположения 'default_locations'.Теперь я должен отобразить «местоположения» из таблицы «Products», но он должен показывать соответствующие значения, например, если это число, он должен показывать местоположение из «free_shipping_location», если это строка, чем это должно отображать это значение.ТАК, как я могу проверить, является ли значение поля 'location' числом или строкой.Для информации: тип данных «location»: character varying.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Мне пришлось поискать character varying в postgresql, и я предполагаю, что PHP ВСЕГДА получит строку из этих типов столбцов, поэтому решение:

// Check if the string only contains digits
if( ctype_digit( $row[ 'locations' ] ) )
{
    // we have an ID!
}
else
{
    // we have some string which is probably not an ID!
}
0 голосов
/ 06 июня 2018

Во-первых, если у вас есть шанс изменить эту структуру базы данных, сделайте это.Наличие единого столбца с двумя совершенно разными значениями будет усложнять вашу жизнь на протяжении всего срока службы приложения.Либо поместите все возможные значения в ссылочную таблицу и всегда сохраняйте location_id, либо используйте два столбца, допускающих значение NULL, один location_id, а другой location_free_text, с ограничением, что каждая строка имеет один или другой (а не оба).

Однако, если вы не можете этого сделать, в PHP вам нужна функция ctype_digit:

Проверяет, все ли символыв предоставленной строке текст числовой.

Таким образом, он вернет true для '123', но false для 'abc' или '-1.2'.

Обратите внимание, что произойдет ошибка, если будет дано что-то отличное отстрока, поэтому вам часто нужно «приводить» аргумент с помощью (string), чтобы убедиться, что он:

 if ( ctype_digit((string)$your_value) ) {
      // It looks like an ID
 } else {
      // It's some other string
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...