Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не понимаю почему не срабатывает отработка цикла, непонятно обрабатыает строку =\ 
V
    Опции темы
Flam
Дата 24.4.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Добрый вечер  граждане винграда!

суть  такова:

у меня есть массив полных префиксов и соответствующих ему сокращенных:


Array
(
    [0] > http://www.w3.org/1999/02/22-rdf-syntax-ns#
    [1] => http://www.w3.org/2000/01/rdf-schema#
    [2] => http://www.w3.org/2002/07/owl#
    [3] => http://xmlns.com/foaf/0.1/
)

Array
(
    [0] => rdf:
    [1] => rdfs:
    [2] => owl:
    [3] => foaf:
)

а также  массив  строк  вида 

Array
(
     [0] => http://xmlns.com/foaf/0.1/Person
    [1] => Sasha
    [2] => http://www.w3.org/2002/07/owl#ObjectProperty
    [3] => Natasha
    [4] => http://www.w3.org/2002/07/owl#Class
)

мне нужно в массиве строк  заменить  полные префиксы  на их сокращенные варианты  =\
т.е  из  строки вида http://xmlns.com/foaf/0.1/Person получить foaf:Person 


Для этого я написал такую функцию:

Код

// функция заменяющая полные URI на URI с префиксами
// в качестве параметров  берется строка($str) , в которой нужно  заменить префиксы
// и по два массива коротких ($arr_pref)  и полных ($arr_fullpref) префиксов.
function change_prefix($str, $arr_pref, $arr_fullpref) {
    foreach($arr_fullpref as $fullpref) {
        $index = array_search($fullpref, $arr_fullpref);
        $pattern = "@$fullpref@is";
        $trig  = strpos($str, $fullpref);
        if($trig !== false) {
            $result =  preg_replace($pattern,$arr_pref[$index], $str);
        }
    }
    return($result);
}


Теперь, если прогнать эту функцию  по всем строкам массива строк,  то если совпадение полных префиксов есть, то все заменяется удачно,  ну а если попадается строка [1] => Sasha   то я получаю  ошибку 
Notice: Undefined variable: result in .........
Почему происходит эта ошибка ясно, но не ясно вот что!  
Почему если добавить 
Код

function change_prefix($str, $arr_pref, $arr_fullpref) {
    foreach($arr_fullpref as $fullpref) {
        $index = array_search($fullpref, $arr_fullpref);
        $pattern = "@$fullpref@is";
        $trig  = strpos($str, $fullpref);
       echo $trig.'<br />';
        if($trig !== false) {
            $result =  preg_replace($pattern,$arr_pref[$index], $str);
        }
        else {
             $result = $str;
        }


    }
    return($result);
}


то тогда  префиксы вообще перестают заменяиться  =\    
в общем  я  так и не понял  в чем соль и надеюсь на вашу помощь (

может быть проверку тиггера $trig на совпадение префикса можно заменить чем нибудь вместо strpos  ?

PM MAIL   Вверх
Photon
Дата 25.4.2010, 01:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: 10
Всего: 12



Код

$arrStr = array(
  "http://xmlns.com/foaf/0.1/Person",
  "Sasha",
  "http://www.w3.org/2002/07/owl#ObjectProperty",
  "Natasha",
  "http://www.w3.org/2002/07/owl#Class"
);
$arrShort = array(
  "rdf:",
  "rdfs:",
  "owl:",
  "foaf:"
);
$arrFull = array(
 "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
 "http://www.w3.org/2000/01/rdf-schema#",
 "http://www.w3.org/2002/07/owl#",
 "http://xmlns.com/foaf/0.1/"
);
$arrStr = str_replace($arrFull, $arrShort, $arrStr);
var_dump($arrStr);


Результат: 
Код

array(5) { 
     [0]=> string(11) "foaf:Person" 
     [1]=> string(5) "Sasha" 
     [2]=> string(18) "owl:ObjectProperty"
     [3]=> string(7) "Natasha"
     [4]=> string(9) "owl:Class" 
}


И вопрос: что я делаю не так, что у меня получается?


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
Flam
Дата 25.4.2010, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



О спасибо вам, умный человек!   За то что открыли мне глаза!
 smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.