За последние 24 часа нас посетили 60298 программистов и 1815 роботов. Сейчас ищут 864 программиста ...

Поиск данных внутри массива

Тема в разделе "PHP для новичков", создана пользователем Doc, 15 дек 2011.

  1. Doc

    Doc Активный пользователь

    С нами с:
    15 дек 2011
    Сообщения:
    17
    Симпатии:
    0
    Задача вроде тривеальная, но что-то никак не получаеться реализовать

    Задача
    есть переменная вида a$="/books/Применение_микроконтроллеров/Микроконтроллеры Фрунзе Том1.djvu"; (фактически локальный путь к файлу)
    и массив данных вида
    Array ( [0] => stdClass Object ( [ebookURL] => /books/Книги/Андреев В.С.Теория нелинейных электрических цепей.1982.djvu ) [1] => stdClass Object ( [ebookURL] => /books/Книги/Андреев Ю.Н. Управление конечномерными линейными объектами.djvu )

    нужно выполнить простую проверку есть ли стока в данном массиве или нет, даже вытаскивать ничего не надо просто получть true или falsh

    кака не крутил ни через in_array ни через array_search ничего не находит
     
  2. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Код, как крутили, интересно посмотреть...
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    К строке надо добираться типа как echo $arr[0]->ebookURL
     
  4. Doc

    Doc Активный пользователь

    С нами с:
    15 дек 2011
    Сообщения:
    17
    Симпатии:
    0
    это каким оброзом ?
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можешь перебрать свой массив объектов в цикле и проверить свойство ebookURL каждого объекта на соответствие заданной строке. Например, так:
    PHP:
    1. <?php
    2. $books = array(); // твой массив
    3. $searchTerm = 'Какое-то название';
    4. $searched = false;
    5. foreach($books as $book) {
    6.     if($searched = strpos($book->ebookURL, $searchTerm) !== false)
    7.         break;
    8. }
    9. // Теперь в переменной $searched будет false, если искомой книги не
    10. // встретилось. Если встретилось, в ней будет некое значение типа integer
    11. ?>
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если этот массив объектов вытаскивается из б.д., то лучше передавать название искомой книги в запросе к б.д. и пусть MySQL (или какая там б.д.) сама ищет.
     
  7. Doc

    Doc Активный пользователь

    С нами с:
    15 дек 2011
    Сообщения:
    17
    Симпатии:
    0
    sobachnik
    я пробывал проверять это дело через mysql, но там одновременно переобатываеться более 3000 элэментов , и старница при такой проверке открываеться 3-4 минуты

    В чикле тоже зависон ещё на большее время

    вобщем вышел из положения переаботкой массива из обекта в обыный
    после чего уже выполняю проверку
    $database->setQuery("SELECT ebookURL FROM #__booklibrary");
    $re = $database->loadObjectList();
    $coont = sizeof($re);
    for ($l=1;$l<=$coont;$l++) {
    $result[$l] = $re[$l]->ebookURL;
    }

    if (array_search(a$, $result)) {$chek = " уже присутсвует в каталоге"; } else {$chek = "";}