Как найти ключевое слово внутри строки или массива, в PHP? - PullRequest
0 голосов
/ 26 января 2012

у меня есть строка:

$string = "test1 - test2 - kw: test - key: 123 - test5";

и я пытаюсь получить этот результат:

kw = test;
key = 123;

Я пытался выплевывать строку:

$array = explode("-", $str );
print_r($array);

и результат:

Array
(
    [0] =>  test1 
    [1] =>  test2
    [2] =>  kw: test
    [3] =>  key: 123
    [4] =>  test5
)

отсюда я хотел бы сделать что-то вроде:

$str = 'kw:';
if ( in_array ( $str , $array ) ) {
    echo 'It exists';
} else {
    echo 'Does not exist';
}

или

$kw = array_search('kw:', $array ); 

но $array - это массивы массивов.

Я не уверен, что делать дальше.

есть идеи? Есть ли другой способ извлечь эти слова?

спасибо

Ответы [ 5 ]

1 голос
/ 26 января 2012

Не элегантно, но:

$string = "test1 - test2 - kw: test - key: 123 - test5"; 

$array = explode(" - ", $string);

foreach ($array as $v) {
    if (strstr($v,"kw: ")) {
        $kw = substr($v,4);
    }
    if (strstr($v,"key: ")) {
        $key = substr($v,5);
    }
}

echo "kw = " . $kw;
echo "key = " . $key;
1 голос
/ 26 января 2012
php > $string="test1 - test2 - kw: test - key: 123 - test5";
php > $pattern="/\ \-\ (\w+)\:\s([^\s]+)/";
php > echo preg_match_all($pattern,$string,$matches);
2
php > print_r($matches);
Array
(
    [0] => Array
        (
            [0] =>  - kw: test
            [1] =>  - key: 123
        )

    [1] => Array
        (
            [0] => kw
            [1] => key
        )

    [2] => Array
        (
            [0] => test
            [1] => 123
        )

)
php > 
1 голос
/ 26 января 2012

Вот цикл, который ищет подстроки kw: и key: в

$string = "test1 - test2 - kw: test - key: 123 - test5";
$array = explode("-", $string);

foreach ($array as $part) {
  if (substr(trim($part), 0, 3) == 'kw:') {
    list($kw, $kwval) = explode(' ' , trim($part));
    echo "kw: $kwval\n";
  }
  if (substr(trim($part), 0, 4) == 'key:') {
    list($key, $keyval) = explode(' ' , trim($part));
    echo "key: $keyval\n";
  }
}


// Output:
// kw: test
// key: 123
1 голос
/ 26 января 2012

Используя preg_match, это становится действительно просто:

$string = "test1 - test2 - kw: test - key: 123 - test5";
$results = preg_match('/.*?(kw: (.*?) - )(key: (.*?) -).*/', $string, $matches);
var_dump($matches);

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

array(5) {
  [0]=>
  string(43) "test1 - test2 - kw: test - key: 123 - test5"
  [1]=>
  string(11) "kw: test - "
  [2]=>
  string(4) "test"
  [3]=>
  string(10) "key: 123 -"
  [4]=>
  string(3) "123"
}

Для получения дополнительной информации о регулярныхвыражения (очень мощный инструмент):

http://www.regular -expressions.info / tutorial.html

0 голосов
/ 26 января 2012

Посмотрите на substr ()

http://php.net/manual/en/function.substr.php

Тебе не нужно взрывать свою строку

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