Вопрос по 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, время: 12:16. |