Php объединяет значения с одинаковыми именами

#php #codeigniter

#php #codeigniter

Вопрос:

Я получаю это в качестве выходных данных

 Department  Employee Name   Employee Code   
Sales   Ganeshmurthy    264 
Sales   AZIM ahmed KHAN 2012    
Sales   DHANABAL    231 04-03-2019  
Service RAVIKIRAN   2003    04-03
Manufacturing   RAJAVARMAN  2073    04-03-2019  09:20   1h 10m
Manufacturing   MEGALA  332 04-03-2019  08:14   0h 4m
Manufacturing   SABARI  333 04-03-2019  08:13   0h 3m
Manufacturing   Sasi    1001    04-03-2019  08:16   0h 6m
Manufacturing   FRANCIES XAVIER 136 04-03-2019  08:13   0h 3m
Manufacturing   MANIKANDAN.V    151 04-03-2019  08:15   0h 5m
  

Я получаю это в формате td, мне нужно объединить дубликаты в один?
У меня есть массив из нескольких отделов, и мне нужно объединить одинаковые названия отделов в один массив. Например, если есть department1 , department1 , department1 повторяющиеся n раз. Мне нужно объединить это в один массив как department1 . Как я могу этого добиться? мне нужно показать это в table — td, чтобы отделы не повторялись

 [0] => Array
        (
            [department_id] => 15
            [department_name] => Ramp;D
            [name] => SUBRAMANIAN
            [code] => 101
            [clockin] => 
            [late] => 
            [date] => 1970-01-01
        )

    [1] => Array
        (
            [department_id] => 3
            [department_name] => Manufacturing
            [name] => RAVI
            [code] => 103
            [clockin] => 
            [late] => 
            [date] => 1970-01-01
        )

    [2] => Array
        (
            [department_id] => 3
            [department_name] => Manufacturing
            [name] => AMULRAJAN.A
            [code] => 104
            [clockin] => 
            [late] => 
            [date] => 1970-01-01
        )

    [3] => Array
        (
            [department_id] => 3
            [department_name] => Manufacturing
            [name] => KANAKARAJ.R
            [code] => 105
            [clockin] => 
            [late] => 
            [date] => 1970-01-01
        )

    [4] => Array
        (
            [department_id] => 3
            [department_name] => Manufacturing
            [name] => ELAYARAJA
            [code] => 106
            [clockin] => 
            [late] => 
            [date] => 1970-01-01
        )
  

Ожидаемый результат, подобный приведенному ниже

 [1] => Array
    (

        [department_name] => Manufacturing

    )

[2] => Array
    (

        [department_name] => R amp; D

    )
  

Вот что я пробовал:

 foreach($attendance as $dr){
           $alldep = $dr->department_name;
       echo $alldep;
}
  

Пожалуйста, обратите внимание, что я получаю все данные в формате массива, а не как объект

Комментарии:

1. Вы должны использовать array_unique()

2. можете ли вы показать пример

Ответ №1:

Вы должны попробовать следующим образом

 $uniqArr= array();
foreach ($attendance as $dr) {
    $uniqArr[] = $dr->department_name;;
}
$uniqueRes = array_unique($uniqArr);
  

Комментарии:

1. я получаю этот вывод: массив ( [0] => Продажи [3] => Сервис [4] => Производство [17] => КОММЕРЧЕСКОЕ [19] => ПРОЕКТИРОВАНИЕ [20] => GCT / ТЕПЛООБМЕННИК / СУШИЛКА для БЕЛЬЯ [21] => HRD [22] => МАРКЕТИНГ [23] => МАТЕРИАЛ)

2. как я могу повторить это

3. Вам нужно выполнить один цикл для echo каждого значения

4. я получаю преобразование массива в строку

Ответ №2:

Берем новый массив $departments

Цикл по заданному массиву.

Добавьте department к $departments .

Используйте department в качестве ключа.

Поскольку массивы PHP всегда имеют уникальные ключи, вы получите только уникальные отделы.

Рабочий код:

 <?php
$arr = [
[
'department_id' => 15 ,'department_name' => 'Ramp;D' ,'name' => 'SUBRAMANIAN' ,'code' => 101
 ,'clockin' => '' ,'late' => '' ,'date' => '1970-01-01'
],
[
 'department_id' => 3 ,'department_name' => 'Manufacturing' ,'name' => 'RAVI' ,'code' => 103
 ,'clockin' => '' ,'late' => '' ,'date' => '1970-01-01'
],
[
 'department_id' => 3 ,'department_name' => 'Manufacturing' ,'name' => 'AMULRAJAN.A' ,'code' => 104 
 ,'clockin' => '' ,'late' =>'' ,'date' => '1970-01-01'
],
[
 'department_id' => 3 ,'department_name' => 'Manufacturing' ,'name' => 'KANAKARAJ.R' ,'code' => 105
 ,'clockin' => '' ,'late' => '' ,'date' => '1970-01-01'
],
[
 'department_id' => 3 ,'department_name' => 'Manufacturing' ,'name' => 'ELAYARAJA' ,'code' => 106
 ,'clockin' => '' ,'late' => ''
]];

$departments = '';
if (! empty($arr)) {
    foreach ($arr as $elem) {
 $departments[$elem['department_name']] = $elem['department_name'];
    }
}
echo '<pre>';print_r($departments);echo '</pre>';
  

Выводит:

 Array
(
    [Ramp;D] => Ramp;D
    [Manufacturing] => Manufacturing
)
  

Комментарии:

1. я получаю эту ошибку @ученик не может использовать объект типа stdClass в качестве массива

2. когда я печатаю это в <td>, все emoployees, имеющие этот определенный отдел, повторяются

Ответ №3:

Попробуйте это

 $department_names = array();

 foreach($attendance as $dr){
   $alldep = $dr->department_name;
   array_push($department_names , array('department_name' => $dr->department_name)); 
}

print_r($department_names$department_names);
  

Вывод

 [1] => Array
(
    [department_name] => Manufacturing
)
[2] => Array
(
    [department_name] => R amp; D
)
  

Ответ №4:

Попробуйте этот код для получения требуемого результата

 $arr = array_unique(array_column($attendance, 'department_name'));
foreach($arr AS $a)
{
    $newarr[]['department_name'] = $a;
}
echo "<pre>"; print_r($newarr);
  

Комментарии:

1. сейчас я получаю уникальные значения, но когда я печатаю, что все сотрудники, имеющие одинаковую должность, повторяются

2. Пожалуйста, опубликуйте точный вывод, который вам нужен, с приведенными выше данными.

3. мне нужно показать данные в табличном формате в <td>, но теперь одни и те же названия отделов повторяются для всех сотрудников, имеющих производственные

4. на самом деле это не помогло

5. Почему бы вам не опубликовать ваше точное требование с некоторыми статическими данными? Массив или изображение могли бы помочь