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 :: Помогите победить массивы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Uchenik
Отправлено: 02 Января, 2014 - 16:31:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 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'=>'ключевые,слова');
Помогите переделать функцию для работы и с двумерными и с трёхмерными массивами
PHP:
скопировать код в буфер обмена
  1. function assign($var,$array)
  2. {
  3. foreach($array as $k=>$v)
  4.  {
  5.    if(!is_numeric($k))
  6.    {$newarray[count($newarray)]['{'.$var.'.'.$k.'}']=$v;}
  7.    else
  8.     {
  9.       foreach ($v as $key=>$value)
  10.         {}
  11.      }
  12.  }
  13.     print_r($newarray);
  14. }
  15. }

(Отредактировано автором: 02 Января, 2014 - 16:36:52)

 
 Top
teddy
Отправлено: 02 Января, 2014 - 16:52:35
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




PHP:
скопировать код в буфер обмена
  1. function asign($var, $arr){
  2.  
  3. foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)) as $key=>$value){
  4.     $output[] = $var.'.'.$key.'='.$value;
  5. }return $output;
  6.        
  7. }
  8. print_r(asign('HEAD', $arr));

Я победил массивы?
 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 17:20:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 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
в этом собственно и вся проблема я понимаю что сохранение имеющихся индексов невозможно без обёртывания массива в новый массив со стандартной нумерацией индексов, т.е. в результате мы получим массив в котором структура будет что-то типа
[индекс][ключ][ключ]=значение

(Отредактировано автором: 02 Января, 2014 - 17:27:51)

 
 Top
teddy
Отправлено: 02 Января, 2014 - 17:26:16
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




так в чем проблема? если вам нужны элементы этого массива то как минимум можно прогнать его через цикл или использовать массу других вариантов

пхп устроен так что массивы не могут иметь несколько одинаковых индексов. тоесть создать конструкцию типа
PHP:
скопировать код в буфер обмена
  1. $arr = [
  2.    0 => 'Vasya',
  3.    0 => 'Petya'
  4. ];

и сохранить при этом оба значения не получится

в крайнем случае можно сделать префиксы для каждого ключа если он является числовым но это извращение и не удобно будет обрабатывать...
 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 17:55:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 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]

(Отредактировано автором: 02 Января, 2014 - 17:59:05)

 
 Top
IllusionMH
Отправлено: 02 Января, 2014 - 18:14:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Uchenik, так что ли?
Массив без вложенности
CODE (htmlphp):
скопировать код в буфер обмена
  1. array (size=2)
  2.   'Title' => string 'title' (length=5)
  3.   'Keys' => string 'key,words' (length=9)
  4.  
  5.  
  6. //результат
  7. array (size=2)
  8.   'HEAD.Title' => string 'title' (length=5)
  9.   'HEAD.Keys' => string 'key,words' (length=9)
  10.  


массив с 1 уровнем вложенности
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. array (size=2)
  3.   0 =>
  4.     array (size=2)
  5.       'Title1' => string 'title1' (length=6)
  6.       'Keys1' => string 'key,words1' (length=10)
  7.   1 =>
  8.     array (size=2)
  9.       'Title2' => string 'title2' (length=6)
  10.       'Keys2' => string 'key,words2' (length=10)
  11.  
  12.  
  13. //результат
  14. array (size=2)
  15.   0 =>
  16.     array (size=2)
  17.       'HEAD.Title1' => string 'title1' (length=6)
  18.       'HEAD.Keys1' => string 'key,words1' (length=10)
  19.   1 =>
  20.     array (size=2)
  21.       'HEAD.Title2' => string 'title2' (length=6)
  22.       'HEAD.Keys2' => string 'key,words2' (length=10)

(Отредактировано автором: 02 Января, 2014 - 18:30:36)

 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 18:21:10
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Не совсем понятно что делает Ваш код, в моём предыдущем посте я дал все пояснения. Нужно чтобы независимо от размера принимаемого массива на выходе получался стандартный массив.
 
 Top
IllusionMH
Отправлено: 02 Января, 2014 - 18:26:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Uchenik, лично я по вашим объяснениям которые варьируются от примера к примеру ничего не понял.

В общем совет: проверяйте если $value это массив - вызывайте свою функцию еще раз(рекурсивно)

В моем примере: сначала входящий, потом полученный массив выведенные через var_dump для двух случаев: сверху массив без вложенности, снизу - с 1 уровнем вложенности. Подправил примеры.
Должен быть такой результат? Если нет - вручную соберите входящий и сходящий массивы и выложите их дампы.

(Отредактировано автором: 02 Января, 2014 - 18:31:30)

 
 Top
caballero
Отправлено: 02 Января, 2014 - 18:27:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




размер массива зависит от того сколько данных туда воткнешь
непонятен вообще смысл проблеммы


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 18:34:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




IllusionMH я пробовал в функции делать проверку и повторно её вызывать (рекурсивно), это не дало нужного результата, индексы не сохранялись. ладно, попробую сам изобрести этот велосипед, позже отпишусь что получилось.
caballero
смысл проблемы был не в размере массива, а в том как в нём сохранялись данные Радость
ну в общем мне нужно чтобы независимо от размера входящего массива на выходе получался стандартный размер.
 
 Top
teddy
Отправлено: 02 Января, 2014 - 18:38:01
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Uchenik пишет:
я как раз об этом и сказал в предыдущем посте

когда я писал это сообщение вы этого не говорили) уже после отредактировали

deleted

(Отредактировано автором: 02 Января, 2014 - 18:56:31)

 
 Top
caballero
Отправлено: 02 Января, 2014 - 18:38:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
смысл проблемы был не в размере массива

Цитата:
чтобы независимо от размера входящего массива на выходе получался стандартный размер

противоречия не видишь?

и шо такое стандартный размер?
если ты туда присвоил 5 елементов там и будет пять елементов

а если функция не то возвращает то потому что ты в массив данные по разному заносишь.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 18:45:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




caballero =)
Допустим в функцию может попасть массив $array[key]=value а может $array[key][key]=value а вернуться из функции должно в любом случае одно и тоже
$array[key][key]=value
Подмигивание
 
 Top
IllusionMH
Отправлено: 02 Января, 2014 - 18:49:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Uchenik пишет:
IllusionMH я пробовал в функции делать проверку и повторно её вызывать (рекурсивно), это не дало нужного результата, индексы не сохранялись.

Uchenik, код в студию, а то там слишком просто, чтобы можно было ошибиться.
не забыли возвращенный результат присваивать в нужный элемент массива?
(Добавление)
teddy, а проще никак сделать нельзя? Зачем все эти нагромождения в данном случае?
 
 Top
Uchenik
Отправлено: 02 Января, 2014 - 18:53:03
Post Id



Частый гость


Покинул форум
Сообщений всего: 187
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)





Мелкий так усиленно наблюдает за темой, но ничего не говорит, ну прямо серый кардинал =)

IllusionMH пишет:
код в студию
не получится, уже стал делать по-другому. Вернулся к варианту из первого поста и начал оттуда проверять очередную теорию.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB