Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Формирование нового массива из существующего
Aleks-prog  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 233
Пользователь №: 28376
На форуме: 5 лет, 9 месяцев, 14 дней
Карма: 2




Здравствуйте, возникла проблема, - не формируется массив из другого массива

Дан этот массив $data:
Array
(
[
0] => Array
(
[
day] => 3
[sotr] => 1
[hours] => 6
[proj] => 1
)

[
1] => Array
(
[
day] => 4
[sotr] => 1
[hours] => 3
[proj] => 1
)

[
2] => Array
(
[
day] => 5
[sotr] => 1
[hours] => 3
[proj] => 1
)

[
3] => Array
(
[
day] => 6
[sotr] => 1
[hours] => 4
[proj] => 2
)

[
4] => Array
(
[
day] => 9
[sotr] => 1
[hours] => 6
[proj] => 2
)

)


Формирую массив следующим образом:

$c =  $this->count; // count = 2
for($i=0;i<$c;$i++){
$j=0;
foreach($data as $key=>$value){
$a = $data[$j]['day'];
$arr[$i]['name']=$data[$i]['proj'];
$arr[$i][$a] = $data[$i]['hours'];
$j++;
}
}

print_r($arr);




Спустя 2 минуты, 30 секунд (20.01.2012 - 16:19) Winston написал(а):
А какой массив должен на выходе получится?

Спустя 7 минут, 3 секунды (20.01.2012 - 16:26) Aleks-prog написал(а):
На выходе должен получится массив:

Array
(
[
0] => Array
(
[
name] => // из $data[$i]['proj']; имя проекта
[4] => // далее числа из $data[$j]['day']; а в значении => часы из $data[$i]['hours'];
[5]
..........................
и тд
)

[
1] => Array
(
[
name] => 4
[4] => // далее числа из $data[$j]['day']; а в значении => часы из $data[$i]['hours'];
[5]
..........................
и тд
)

)

Спустя 22 минуты, 41 секунда (20.01.2012 - 16:49) Aleks-prog написал(а):
если поможет, то
Во внутреннем цикле я заполняю колонки для таблицы и их значения, а также имя таблицы, то есть
дан массив $data, который я привел в первом посте, далее привожу коментарии по каждой строки ниже:

for($i=0;i<$c;$i++){
$j=0;
foreach($data as $key=>$value){
$a = $data[$j]['day']; // создание ключа(числа) для нового массива
$arr[$i]['name']=$data[$i]['proj']; // новый массив[0]['name']=имя проекта(или id)
$arr[$i][$a] = $data[$i]['hours'];// новый массив[0]['число месяца']=отработанные часы
$j++;// переходим к следующему дню
}
}

Спустя 4 часа, 22 минуты, 27 секунд (20.01.2012 - 21:11) Aleks-prog написал(а):
UP
если не сложно помогите, очень нужно

Спустя 1 день, 10 часов, 47 минут, 20 секунд (22.01.2012 - 07:58) Guest написал(а):
UP

Получается бесконечный цикл, кто-нибудь отзовитесь smile.gif

Спустя 5 часов, 8 минут, 12 секунд (22.01.2012 - 13:07) Aleks-prog написал(а):
походу никто так и не подскажет, эх... sad.gif

Спустя 37 минут, 53 секунды (22.01.2012 - 13:44) redreem написал(а):
как у тебя вообще работает?

for($i=0;i<$c;$i++){ - $i<$c же.



Спустя 3 минуты, 24 секунды (22.01.2012 - 13:48) redreem написал(а):
чтобы "помогать" - вытащи отдельно свой код, чтоб можно было его сразу тестить. на коленке гадать чтоли?

Спустя 4 часа, 35 минут, 9 секунд (22.01.2012 - 18:23) Aleks-prog написал(а):
Это я уже исправил, все равно получается бесконечный цикл

Спустя 6 минут, 37 секунд (22.01.2012 - 18:30) redreem написал(а):
не видя кода, который можно запустить - мне это ни о чем не говорить. экстрасенсов нету тут.

Спустя 4 минуты, 15 секунд (22.01.2012 - 18:34) Aleks-prog написал(а):
посмотрите тестовый код:



$data = array('0'=>array('day'=>'3','sotr'=>'1','hours'=>'3','proj'=>'1'),
'1'=>array('day'=>'4','sotr'=>'1','hours'=>'3','proj'=>'1'),
'2'=>array('day'=>'5','sotr'=>'1','hours'=>'4','proj'=>'2')
'3'=>array('day'=>'9','sotr'=>'1','hours'=>'6','proj'=>'2'));

$c = 2;
for($i=0;$i<$c;$i++){
$j=0;
foreach($data as $key=>$value){
$a = $data[$j]['day'];
$arr[$i]['name']=$data[$i]['proj'];
$arr[$i][$a] = $data[$i]['hours'];
$j++;
}
}

print_r($arr);

Спустя 18 минут, 35 секунд (22.01.2012 - 18:52) redreem написал(а):
ничего бесконечного не получается. у меня выводит:

Цитата
Array ( [0] => Array ( [name] => 1 [3] => 3 [4] => 3 [5] => 3 [9] => 3 ) [1] => Array ( [name] => 1 [3] => 3 [4] => 3 [5] => 3 [9] => 3 ) )


правда ошибочка одна есть - запятой нет одной в объявлении массива $data

Спустя 14 минут, 10 секунд (22.01.2012 - 19:07) Aleks-prog написал(а):
чо то я ваще уже - голова кипит,
for($i=0;$i<$c;$i++){
$c - массив же, мне надо значит count($c) :lol:

Спустя 31 секунда (22.01.2012 - 19:07) asokol написал(а):
А в чем смысл всех этих махинаций?

Если я правильно понимаю, то $c=2 - это количество разных proj в $data (1 и 2). По идее, Вам надо получить список проектов с датой и временем внесения изменений (или чего-то подобного). Если это не так, то объясните, что за $this->count и каков смысл всех этих телодвижений.

Спустя 2 минуты, 4 секунды (22.01.2012 - 19:09) redreem написал(а):
Цитата
$c - массив же


да - с головой че-то не то.

Спустя 10 минут, 13 секунд (22.01.2012 - 19:19) Aleks-prog написал(а):
кипит уже, на простых вещах запинаюсь, надо отдохнуть)))
мне нужно получить список проектов, выполненных сотрудником за определенный месяц, год, и отработанные часы за проектом за каждый день, вся инфа есть в БД, работаю с zend и extjs 4, пытаюсь заполнить тем самый grid из extjs

Спустя 8 минут, 16 секунд (22.01.2012 - 19:28) asokol написал(а):
Так лучше прямо из БД по максимуму вытягивать то, что нужно получить.

Спустя 55 минут, 13 секунд (22.01.2012 - 20:23) Aleks-prog написал(а):
Кстате непонятно, добавил нужное условие, но цикл выполняется ТОЛЬКО 1 раз, хотя по условию должен выполняться 2 раза


$c = array('0'=>array('project'=>'1'),
'1'=>array('project'=>'2') );
$data = array('0'=>array('day'=>'3','sotr'=>'1','hours'=>'3','proj'=>'1'),
'1'=>array('day'=>'4','sotr'=>'1','hours'=>'3','proj'=>'1'),
'2'=>array('day'=>'5','sotr'=>'1','hours'=>'4','proj'=>'2')
'3'=>array('day'=>'9','sotr'=>'1','hours'=>'6','proj'=>'2'));

for($i=0;$i<2;$i++){
$j=0;

foreach($data as $key=>$val){


if($data[$j]['proj']==$c[$i]['project']){
$a = $data[$j]['day'];
$arr[$i]['name']=$data[$j]['proj'];
$arr[$i][$a] = $data[$j]['hours'];
$j++;
}
}

}

//print_r($data);
print_r($arr);

Спустя 1 час, 58 минут, 32 секунды (22.01.2012 - 22:21) neadekvat написал(а):
Честно говоря, нихера не понятно.

Давай сначала: исходные данные, что с ними нужно сделать, пример конечных данных.

Причем все это желательно в виде php-кода (как в последнем листинге), а не в виде распечатки массива.


Спустя 11 часов, 19 минут, 17 секунд (23.01.2012 - 09:41) Aleks-prog написал(а):
Пример конечных данных:

array('0'=>array('name'=>'1', '3'=>'3', '4'=>'3'),
'1'=>array('name=>'2', '5'=>'4', '9'=>'6') );


Описание:
name - id проекта
поля 3, 4 идентификатора '0' и 5, 9 идентификатора '1' - числа затраченные на разработку проекта, а их значения - часы затраченные на разработку проекта по каждому дню

Спустя 18 минут (23.01.2012 - 09:59) Aleks-prog написал(а):
самая главная проблема сейчас что не добавляется индекса '1' в массив

В том, что на выходе получается всего один индекс '0' а должно быть два: '0' и '1', то есть

array('0'=>array('name'=>'1'),
'1'=>array('name=>'2') );


а получается ВОТ ЧТО:

array('0'=>array('name'=>'1'))

Спустя 9 минут (23.01.2012 - 10:08) Aleks-prog написал(а):
Все получилось тема закрыта
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса