Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите победить массивы
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
Добрый вечер.
Хочу написать функцию, но никак не могу сообразить, дело вот в чем
функция принимает слово($var) и массив($array), затем создаёт них новый массив, ну например если передать в неё $var='HEAD'; и $array('Title'=>'Заголовок','Keyw'=>'ключевые,слова');
то функция вернёт
{HEAD.Title}='Заголовок';
{HEAD.Keyw}='ключевые слова';
Работает идеально, но если я передаю в неё массив, в формате
$array[0]['title']='Заголовок';
$array[0]['keyw']='ключевые слова';
функция возвращает не то что нужно, она вернёт что-то типа {HEAD.0}=Array('Title'='Заголовок','Keyw'=>'ключевые,слова');
Помогите переделать функцию для работы и с двумерными и с трёхмерными массивами
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
возможно я не совсем точно объяснил ситуацию, но во втором случае, когда я передаю массив с индексами, индексы элементов одинаковые, и мне бы хотелось чтобы на выходе из функции связь между элементами не терялась, ну вот например если я передаю массив
$Menu[0]['name']='Главная';
$Menu[0]['link']='?page=home';
$Menu[1]['name']='О Нас';
$Menu[1]['link']='?page=about';
, в Вашем случае вернется массив
[0] => MENU.name=Главная
[1] => MENU.link=?page=home
[2] => MENU.name=О Нас
[3] => MENU.link=?page=about
а не
[0] => MENU.name=Главная
[0] => MENU.link=?page=home
[1] => MENU.name=О Нас
[1] => MENU.link=?page=about
в этом собственно и вся проблема я понимаю что сохранение имеющихся индексов невозможно без обёртывания массива в новый массив со стандартной нумерацией индексов, т.е. в результате мы получим массив в котором структура будет что-то типа
[индекс][ключ][ключ]=значение
в крайнем случае можно сделать префиксы для каждого ключа если он является числовым но это извращение и не удобно будет обрабатывать...
Uchenik
Отправлено: 02 Января, 2014 - 17:55:27
Частый гость
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
teddy я как раз об этом и сказал в предыдущем посте =)
Ну т.е. чтобы на выходе получать всегда одинаковый стандартный размер массива (независимо от размера входящего массива) я предполагаю необходимо добавить индекс.
на выходе мне нужно получить массив в формате
[0][0][HEAD.Title]
[1][1][HEAD.Kw]
[2][0][MENU.Name]
[3][0][MENU.Title]
[4][1][MENU.Name]
[5][1][MENU.Title]
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
Не совсем понятно что делает Ваш код, в моём предыдущем посте я дал все пояснения. Нужно чтобы независимо от размера принимаемого массива на выходе получался стандартный массив.
IllusionMH
Отправлено: 02 Января, 2014 - 18:26:40
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Uchenik, лично я по вашим объяснениям которые варьируются от примера к примеру ничего не понял.
В общем совет: проверяйте если $value это массив - вызывайте свою функцию еще раз(рекурсивно)
В моем примере: сначала входящий, потом полученный массив выведенные через var_dump для двух случаев: сверху массив без вложенности, снизу - с 1 уровнем вложенности. Подправил примеры.
Должен быть такой результат? Если нет - вручную соберите входящий и сходящий массивы и выложите их дампы.
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
IllusionMH я пробовал в функции делать проверку и повторно её вызывать (рекурсивно), это не дало нужного результата, индексы не сохранялись. ладно, попробую сам изобрести этот велосипед, позже отпишусь что получилось. caballero
смысл проблемы был не в размере массива, а в том как в нём сохранялись данные
ну в общем мне нужно чтобы независимо от размера входящего массива на выходе получался стандартный размер.
teddy
Отправлено: 02 Января, 2014 - 18:38:01
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
Uchenik пишет:
я как раз об этом и сказал в предыдущем посте
когда я писал это сообщение вы этого не говорили) уже после отредактировали
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
caballero =)
Допустим в функцию может попасть массив $array[key]=value а может $array[key][key]=value а вернуться из функции должно в любом случае одно и тоже
$array[key][key]=value
IllusionMH
Отправлено: 02 Января, 2014 - 18:49:59
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Uchenik пишет:
IllusionMH я пробовал в функции делать проверку и повторно её вызывать (рекурсивно), это не дало нужного результата, индексы не сохранялись.
Uchenik, код в студию, а то там слишком просто, чтобы можно было ошибиться.
не забыли возвращенный результат присваивать в нужный элемент массива? (Добавление) teddy, а проще никак сделать нельзя? Зачем все эти нагромождения в данном случае?
Uchenik
Отправлено: 02 Января, 2014 - 18:53:03
Частый гость
Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011
Помог: 1 раз(а)
Мелкий так усиленно наблюдает за темой, но ничего не говорит, ну прямо серый кардинал =)
IllusionMH пишет:
код в студию
не получится, уже стал делать по-другому. Вернулся к варианту из первого поста и начал оттуда проверять очередную теорию.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.