Спарсить первое значение если имеется или другое если оно отсутствует

Тема в разделе "Как сделать...", создана пользователем Sergo_Sev, 28 фев 2013.

  1. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    187
    Имеется исходный код примерно такой структуры

    Код:
     
    {"id":"138878678_296759228 -----------------куча разных бесполезных данных-----------------
    "x_src":"http:\/\/cs323223.userapi.com\/v323223678\/6290\/lLEGX-ZsWDs.jpg","x_":["6290\/lLEGX-ZsWDs",604,441],
    "y_src":"http:\/\/cs323223.userapi.com\/v323223678\/6291\/Mf_YswGANVs.jpg","y_":["6291\/Mf_YswGANVs",807,589],
    "z_src":"http:\/\/cs323223.userapi.com\/v323223678\/6292\/3HuZ5HzKEsA.jpg","z_":["6292\/3HuZ5HzKEsA",900,657],
    "o_src":"http:\/\/cs323223.userapi.com\/v323223678\/6293\/DFQM69MiBxk.jpg","o_":["6293\/DFQM69MiBxk",130,95],
    "p_src":"http:\/\/cs323223.userapi.com\/v323223678\/6294\/psXlWGA2taY.jpg","p_":["6294\/psXlWGA2taY",200,146],
    "q_src":"http:\/\/cs323223.userapi.com\/v323223678\/6295\/DbAPIrfw82w.jpg","q_":["6295\/DbAPIrfw82w",320,234],
    "r_src":"http:\/\/cs323223.userapi.com\/v323223678\/6296\/Eq86WK4Q_4I.jpg","r_":["6296\/Eq86WK4Q_4I",510,372]},
     
    {"id":"138878678_292180276" -----------------куча разных бесполезных данных-----------------
    "x_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e49\/6By_f1Gy_24.jpg","x_":["7e49\/6By_f1Gy_24",446,604],
    "y_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4a\/Y_Eo24WXq_M.jpg","y_":["7e4a\/Y_Eo24WXq_M",596,807],
    "z_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4b\/4LlP4L0e20I.jpg","z_":["7e4b\/4LlP4L0e20I",756,1024],
    "w_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4b\/4LlP4L0e20I.jpg","w_":["7e4b\/4LlP4L0e20I",1365,2048],
    "o_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4c\/lARQsplbciw.jpg","o_":["7e4c\/lARQsplbciw",130,176],
    "p_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4d\/XTd7GCt-_H8.jpg","p_":["7e4d\/XTd7GCt-_H8",200,271],
    "q_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4e\/BuXg1dbfn_8.jpg","q_":["7e4e\/BuXg1dbfn_8",320,433],
    "r_src":"http:\/\/cs411925.userapi.com\/v411925678\/7e4f\/MCJnVmzjmR8.jpg","r_":["7e4f\/MCJnVmzjmR8",510,691]},{"id":"138878678_296542282"
    

    И вот так я хотел получить ссылку на фотку нужного размера

    Код:
    preg_match ('!138878678_296759228.*w_src\":\"(.*?)\",\"w_!ism',$url,$img); 
    Проблема в том, что если фотки с размером w_src нет, то я получаю ссылку на следующую фотку (в том месте где w_src содержится).
    Мне нужно, что бы если размера w_src не было то брался z_src, а если и его нет то y_src, но никак не ссылка на другую фотку из следующего блока
    Как это реализовать?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.546
    Симпатии:
    1.418
    preg_match это тяжко для процессора, может сделаешь json_decode и цикл foreach с вложенными if/else?
     
  3. Sergo_Sev

    Sergo_Sev Творец

    Регистр.:
    14 июн 2008
    Сообщения:
    571
    Симпатии:
    187
    Я пока плохо в php разбираюсь, preg_match самый простой вариант. Да и процессор переживет т.к. парсить совсем мало
    Но тут не ясно как ограничиться поиском в блоке с конкретным ID если мы не знаем размер этого блока, что бы к точно указать какой кусок кода брать и какие значения из него выбрать

    Если можете - приведите пример для данного случая с json_decode т.к. не понял вообще как работает эта функция, верней как мне ее использовать, но все же я склоняюсь к preg_match