Вопрос по PHP оффтопик небольшой
function getCatigories($patch) { function name($val) { //вот тут я val сравниваю с внешней $patch if($val == $patch){return true;} else{return false;} } return array_filter(scandir($patch), 'name'); }; //то есть если элемент массива равен 'doors' то оставить его. getCatigories('doors'); почему в функции name не видется переменная $patch? Я хочу чтобы калбак функция которая фильтрует массив имела доступ к одной переменной (именно со значением этой переменной мне и надо сравнивать элементы массива) |
Народ я реал не могу с этим работать!
Я просто хочу отфильтровать массив(((( в фильтраторе массивов я хочу использовать внешнюю переменную, НО У МНЯ НЕТ К НЕЙДОСТУПА!!!! что это за язык то такой!111 |
Второй вопрос почему это говно не работает? Жаль все таки что ЗРЗ не умеет работать с JON и что в PHP все криво и ужасно! И дело не в моем незнании а именно в кривости и неинтуитивности PHP!
$qq = json_decode('{"name" : "sasha"}') ; echo $qq['name']; вы представляете, это уродство не работает!! ПОЗОР СОЗДАТЕЛЯМ PHP!! Цитата:
АДОВО, СРАБОТАЛО $qq -> name . ЭТО АДОВО.... короче у меня батхерд с этого языка!11 прошу всех извенить я спать я не буду учить это чудовище, лучше буду кодить на питоне и на node.js |
ты уже ненавидишь PHP на все 146%? :D https://twitter.com/#!/homm86/status/166379169167577088
|
Octane,
Помоги а(!! Мне нужно сделать кое что у меня крыша едет с этого языка((((; echo file_get_contents('./doors/categories.ini'); // {"doo":"ww"} echo getCatigories(); // ["doo"] А ТЕПЕРЬ PHP ИДЕТ В БОЙ!!!! echo getCatigories() . file_get_contents('./doors/categories.ini'); /// ????? Угадайте что выведет???? думаете {"doo":"ww"}["doo"] ???? НОРМАЛЬНЫЙ ЧЗЫК - ДА!! НО ЭТО ЖЕ ПЫХА!11 Она выводит ["doo"]п»ї{"doo":"ww"} что вто это такое п»ї млять вообще?? я это не писал1!1 я детьми клянусь я не писал такого!!11 при том и файл categories.ini и мой php файл в utf8 кодировке. я уточню {"doo":"ww"} и ["doo"] это строки JSONa |
Я в PHP только
header(…) и echo json_encode($array) умею ![]() |
Octane,
НИКОГДА, слышашь , ради бога ни когда не пытайся понять этот язык! Я щас яишницу из за него уронил на пол и тарелку разбил а у меня 5 часов ночи..... В этом языке нет областей видимости....... и нельзя обьявлять переменные..... при соединении строк строк он добавляет в стыки 3 символа п»ї ...... при том нет доступа к внешним областям видимости, по скольку и областей видимости тоже нет.......... создатели языка просто гении информационных технологий....... |
ты это не видишь, но оно есть !!! это BOM
с областями видимости я пожалуй соглашусь, через одно место оно :\ вот на для развития http://www.php.ru/manual/language.variables.scope.html |
Цитата:
Почитай внимательно про то как в нем работают замыкания. А еще почитай про то, что на самом деле возвращает scandir() |
Цитата:
Читай документацию. У json_decode есть второй параметр. |
Цитата:
В текстовых редакторах обычно имеется возможность выбрать сохранять ли BOM, или нет. И либо ты выбрал сохранять с ним, либо сохранил файл через обычный Notepad. И есть ты будешь читать этот файл через любой другой язык, то эти три байта там также будут. |
Цитата:
Читай документацию Цитата:
По-моему как-раз нормально что язык не тянет в локальную область видимости всю хуйню с вышестоящих областей видимости, в том числе и глобальной, а предлагает программисту конкретезировать что именно тянуть. |
И еще раз напоминаю
Цитата:
|
Mахmaxmaximus, не ты ли предлагал в соседней теме читать документацию перед тем, как делать выводы о языке?
|
В пыхе нет вложенных функций, как в первом сообщении.
function name объявится в глобальном контексте. но в 5.3 есть анонимные функции: function getCatigories($patch) { $name = function ($val) use $patch { ... } // ... } |
Gvozd,
да, точно спасибо за все. я как раз по докам и работаю. просто я пишу что то роде "как прочитать файл" и попадаю на левый сайт п, там про то как файл считывать. Но ни слова про параметры и про работу функции. надо порсто найденые функции а официальной доке проверять. |
vasa_c,
научтие меня как мне передать доступ из одной локальной области видимости функции в другую. ретурнами и передачей параметров? |
Цитата:
То есть в JS мы все кипятком писаем выкручиваемся лиш бы не засирать глобальную а тут это приветствуется? хотя разницы ни какой нет. |
Цитата:
Только посмотрите внимательно вывод scandir, ибо ваша исходная задача не решится в таком виде |
использовать глобальную переменную в функции в рнр можно 4 способами
uasort(масс,функция)-сортировка массива с использованием пользовательской функции usort(масс,функция) -для не ассоциативных |
class Parser { public function __construct($patch) { $this->patch = $patch; } public function getCategories() { return array_filter(scandir($val), array($this, 'callback)); } private function callback($val) { if ($val == $this->patch) { return true; } else { return false; } } private $patch; } |
dmitriymar,
Как это поможет? |
Gvozd,
насколько я понял ему нужна сортировка массива с использованием его данных. это сортировка массива с использованием пользовательской функции в принципе аналог array_filter только сортировку производит в самом массиве, а array_filter возвращает отсортированный |
function getCatigories($patch) { function name($val) { global $patch; //вот тут я val сравниваю с внешней $patch if($val == $patch){return true;} else{return false;} } return array_filter(scandir($patch), 'name'); }; //то есть если элемент массива равен 'doors' то оставить его. getCatigories('doors'); |
Я получаю имена папок и файлов в одной директории, мне нужно получить массив только папок.
я получаю массив И папок и файлов, и пробегаясь по нему проверяряю что есть файл а что есть папка, и если это папка то засовываю путь в новый массив. В итоге в новом массиве остаются только пути папок. в JS это было бы так function getFoldersArray(patch) { var arrFolders = []; //scandir возвращает массив и папок и файлов scandir(patch).forEach(thisPatch) { //is_dir проверяет если папка то возвращает true if (is_dir(thisPatch)) { arrFolders.push(thisPatch); } } return arrFolders; } var arrayFoldersInDoorsFolder = getFoldersArray("/doors"); |
|
Цитата:
glob('./doors/*.{jpg,jpeg,png,bmp,gif}', GLOB_BRACE); я могу выбирать расширения, но $dirs = glob("./doors/*", GLOB_ONLYDIR); Другой вопрос, как получить только файлы? |
|
vasa_c,
спасибо огромное! но как получить только файлы? |
ну видимо придётся обходить всё и смотреть, файл это или нет
|
А есть известные причины по которым не сделали такую функцию, а для нахождения папок сделали?
и второй вопрос что такое stdClass почему он не хочет отдавать данные вот так obj['prop']? |
Цитата:
Используется там, где нужно работать просто с объектом без определенного класса Например json_decode по-умолчанию(без второго параметра) возвращает объект stdClass Естественно, что экземпляр этого класса не будет отдавать данные как массив. Нужно использовать номральный синтаксис обращения к свойствам объекта. |
Gvozd,
ясн, а обьект и массив в PHP одно и то же? То есть это один и тот же класс Array? п.с. как проверить существует ли свойство у $_GET? property_exists($_GET, 'getCategories') варнингует Warning: First parameter must either be an object or the name of an existing class |
Цитата:
Массивы не являются объектами. У них нету ни свойств ни методов, а есть только ключи и соответсвующие им элементы. Причем ключи могут быть как целочисленные, так и строковые. В последнем случае - получаем ассоциативный массив, но он не становится от этого объектом. Получать досту к элементу предполагается таким синтаксисом: $array[0], $array['text_key'] А объекты - они уже имеют свойства, методы и прочая. Доступ к свойствам и методам осуществляется через -> (или :: для статических) Экземпляры некоторых классов (реализующих интерфейс ArrayAccess, и при необходимости несколько сопутсвующих) могут использоватся как массивы. Но это уже будут объекты, а не массивы. Но это уже из разряда тех кун-гфу: не все знают, и еще меньше используют |
Некоторые мысли на эту тему:
К примеру array_keys(); имеет следующий прототип: array array_keys ( array $input [, mixed $search_value [, bool $strict = false ]] ) Как мы видим array_keys() имеет тип array. А вызывается он так array_keys(), а не так array.array_keys() вероятно потому что в заголовочном файле array прописано примерно такая строчка: using namespace array; Что создает видимость считать, что array_keys() это отдельная от объекта array функция. А обращение к элементам массива типа $array[0], это ничто иное как перегруженный оператор [], который имеет реальный член класса типа array::get(); Если честно не понятно почему разработчики php так усердно скрывают реальные типы объектов. |
monolithed,
видимо чтобы не путали массивы с обьектами? нет? |
monolithed,
Мне кажется что вы взяли все свои предположения с потолка. Или вы реально читали исходные коды, и все описанное вами видели там? |
Цитата:
Цитата:
UPD: Цитата:
|
Цитата:
Насколько я понял исходники, в качестве массивов используются структуры типа HashTable, а объекты тип ArrayObject просто содержат в себе экземпляр HashTable, который и подсовывают при использовании их как массивов Функции высокого уровня, типа array_key_exists() внутри работают именно в процедурном стиле, и более низкоуровневые функции также до последнего принимают одним из параметров HashTable, вплоть до zend_hash_exists, который уже просто пробегается циклом по представленному HashTable Вот кстати сам HashTable Код:
typedef struct _hashtable { Весь код обслуживающий его вынесен в отдельные функции, которые принимают массив одним из параметров. Таким образом array_key_exists() является самостоятельной функцией, принимающей массив одним из аргументов, но не более |
Цитата:
Сейчас скачал исходники действительно на С, только разобраться пока не получилось. |
Часовой пояс GMT +3, время: 21:19. |