пример практически из манов.
это всё удобно, конечно, но я до данного момента нашёл только в одном случае реальное применение SPL (без него было бы не обойтись)
хм, а насколько вообще оправдано использование SPL? просто я являюсь и прикладником и веб-разработчиком. В С++ активно использую STL, а вот в PHP иногда не хватает подобного. Вот и хотелось бы узнать насколько данный инструмент мощен
данный инструмент используется сравнительно недавно, хотя и упрощает многое.
на мой взгляд это достаточно интересное решение, которое только облегчает работу.
Хотя с мощью STL оно не сравнится в силу различия применения языков
Ну этот клас берет многомерный масив и делает одномерный, складывая ключ значение как он нашел в масивах и во вложеных масивах, вполне возможно иметь в двух вложеных масивах одинаковые названия ключей, как тогда они будут именоваться уже в новом выдаваемом одномерном масиве.
Кстати очень интересный вопрос, надеюсь автор прояснит ситуацию. Хочется надеяться, что будет просто массив с элементами под данным индексом лежать, иначе это сильно обесценивает данный метод.
Автор конечно прояснит
1) Итератор - это не копия, это указатель на элементы
2) покажите мне в примере где именно создается масиив
Предлагаю запустить следующий пример (не обращайте внимание на некорректную работу с типами)
$array_multi = array(
"myKey" => "myValue",
"myKey2"=> array(
"myKey2Array" => "value2Array",
"myKey3Array" => "value3Array",
"myKey4Array" => "value4Array",
"myKey5Array" => array("test", "tata", "france")));
мы видим создание объекта, но в пхп никто не мешает обращаться к полям объекта как к элементам массива.
И потом в объекте тоже нельзя сделать два поля с одинаковым именем.
Замечательно!
Если в объекте нельзя создать поля с одинаковыми именами, в массиве видимо тоже.
Еще раз задаю вопрос: Где именно происходит копирование элементов в массив?
Вы сами себе противоречите.
Ещё раз - итератор это указатель на структуру данных.
Купите книжку Бьярна Страуструпа по Си++ и почитайте что такое итераторы.
что такое итераторы я знаю;)просто когда мы делаем форич созданного итератора мы ведь выводим все его поля?так? или каким то хитрым образом перехватывается форич (просто я не знаю возможно ли перехватить форич в пхп, поэтому и спрашиваю)?
пример просто не успел еще посмотреть
Я для вас даже пример написал, не знаю почему вы сами не проверили
$array_multi = array(
"myKey" => "myValue",
"myKey2"=> array(
"myKey" => "myValue",
"myKey21" => "value3Array",
"myKey4Array" => "value4Array",
"myKey5Array" => array("test", "tata", "france")));
$array_iterator2 = new RecursiveIteratorIterator(
new RecursiveArrayIterator($array_multi));
foreach($array_iterator2 as $key=>$value)
echo $key.' — '.$value."\n";
Скажите, а есть элегантный и правильный способ сравнения двух массивов кроме последовательного прохода обоих массивов (удалять элементы нельзя)? Вопрос применим к AutoIT
про AutoIt не знаю, поэтому буду отвечать на теоретическом уровне. Если массивы отсортированы, то вместо n*m итераций (n,m - длины массивов), можно будет сделать k итераций (k меньшее из n и m) чтобы сказать со 100% вероятностью да или нет. С меньшим количеством итераций...хм...ну если под сравнением понимать в том числе и нахождение подмассива пересечения или выявление одного массива как подмассива другого массива, то это делается динамическим программированием, это крайне элегантно, но количество итераций опять будет n*m.
Если же нас интересует сравнение массивов не как множеств элементов, а именно как векторов то в этом случае нам всегда понадобится z итераций (z - большее из n и m).
Может что еще упустил из виду.
Надо сверить совпадают ли и если не совпадают, то выкатить список ошибок. Я делаю цикл по одному массиву, а внутри цикл по второму. В результате получится n*m операций сравнения. На маленьких объёмах терпимо, но если больше 40 000 строк в каждом массиве начинает занимать много времени и это расшатывает мою нервную систему.
хм, если не совпадает количество то выводятся лишние элементы в большем массиве, если не совпадают то в зависимости от того какой уровень крутости сравнения нужен либо делаем шаг (или несколько) вперед и смотрим что творится там, после чего анализируем данные от нескольких шагов. Либо если нужно банальное несовпадение(то есть симметричная разность множеств), то (мы разбираем случай сортировки по возрастанию) смотрим какое меньше то и лишнее и делаем по этому массиву шаг вперед, а на другом массиве остаемся на том же элементе.
У меня вопрос по поводу подобного случая — я вот таким же примерно методом получаю пары ключ-значение из конфига, конфиг хранится как раз в массиве многоуровневом. Вывожу это дело и формирую на основе него форму изменения конфига в админке приложения. Каким образом можно было бы русифицировать ключи, причем для админки. Т.е. сами ключи не трогать, но при выводе в админку подставлять русские значения.
Рекурсивный обход массива