Сравните аналогичное значение из массива и сгенерируйте новый массив с другими значениями - PullRequest
0 голосов
/ 13 июня 2018

Это мой текущий массив, и я хочу сравнить подобный user_id и сгенерировать новый массив со всеми связанными вопросами.Как видно из приведенного ниже примера, у пользователя 1 есть вопрос 1 и вопрос 2 в массиве, и на следующем этапе мы можем видеть, что у пользователя 1 есть вопрос 4 и вопрос 5, поэтому мне нужно объединить все вопросы и создать пользовательский массив.

Array

[0] => Array
    (
        [user_id] => User 1
        [question_1] => Question 1?
        [question_2] => Question 2?

[1] => Array
    (
        [user_id] => User 2
        [question_1] => Question 2?
        [question_2] => Question 3?
    )

[2] => Array
    (
        [user_id] => User 3
        [question_1] => Question 3?
        [question_2] => Question 1?
    )

[3] => Array
    (
        [user_id] => User 4
        [question_1] => Question 1?
        [question_2] => Question 2?
    )

[4] => Array
    (
        [user_id] => User 5
        [question_1] => Question 2?
        [question_2] => Question 3?
    )

[5] => Array
    (
        [user_id] => User 1
        [question_1] => Question 4?
        [question_2] => Question 5?
    )

[6] => Array
    (
        [user_id] => User 2
        [question_1] => Question 5?
        [question_2] => Question 6?
    )

[7] => Array
    (
        [user_id] => User 3
        [question_1] => Question 6?
        [question_2] => Question 4?
    )

[8] => Array
    (
        [user_id] => User 4
        [question_1] => Question 4?
        [question_2] => Question 5?
    )

[9] => Array
    (
        [user_id] => User 5
        [question_1] => Question 5?
        [question_2] => Question 6?
    )

[10] => Array
    (
        [user_id] => User 1
        [question_1] => Question 7?
        [question_2] => Question 8?
    )

[11] => Array
    (
        [user_id] => User 2
        [question_1] => Question 8?
        [question_2] => 
    )

[12] => Array
    (
        [user_id] => User 3
        [question_1] => 
        [question_2] => Question 7?
    )

[13] => Array
    (
        [user_id] => User 4
        [question_1] => Question 7?
        [question_2] => Question 8?
    )

[14] => Array
    (
        [user_id] => User 5
        [question_1] => Question 8?
        [question_2] => 
    )

)

Вот пример того, что я хочу именно.

[0] = Array
('user_id' => 'User 1',
 'questions' => Array
   (
     'Question 1',
     'Question 2',
     'Question 4',
     'Question 5',
     'Question 7',
     'Question 8'
   )
 )
[1] = Array
('user_id' => 'User 2',
 'questions' => Array
   (
     'Question 2',
     'Question 3',
     'Question 5',
     'Question 6',
     'Question 8'
   )
 )

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

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

foreach ($final_array as $master)
    {
        array_push($ques,$master['question_1']);

        array_push($ques,$master['question_2']);

        $temp_array = array('user_id' => $master['user_id'],'questions' => $ques);

        $search = ['user_id' => $master['user_id']];

        $keys1 = array_keys(array_filter($all_array,function ($v) use ($search) { return $v['user_id'] == $search['user_id']; } ) );

        if(isset($keys1[0]))
        {
            $st = $keys1[0];    

            array_push($all_array[$st]['questions'],$master['question_1']);
            array_push($all_array[$st]['questions'],$master['question_2']);
        } 
        else
        {
            array_push($all_array, $temp_array);

        }
    }

И ниже вывод после применения приведенного выше кода.

Array
(
    [0] => Array
        (
            [user_id] => User 1
            [questions] => Array
                (
                    [0] => Question 1?
                    [1] => Question 2?
                    [2] => Question 4?
                    [3] => Question 5?
                    [4] => Question 7?
                    [5] => Question 8?
                )

        )

    [1] => Array
        (
            [user_id] => User 2
            [questions] => Array
                (
                    [0] => Question 1?
                    [1] => Question 2?
                    [2] => Question 2?
                    [3] => Question 3?
                    [4] => Question 5?
                    [5] => Question 6?
                    [6] => Question 8?
                    [7] => 
                )

        )

    [2] => Array
        (
            [user_id] => User 3
            [questions] => Array
                (
                    [0] => Question 1?
                    [1] => Question 2?
                    [2] => Question 2?
                    [3] => Question 3?
                    [4] => Question 3?
                    [5] => Question 1?
                    [6] => Question 6?
                    [7] => Question 4?
                    [8] => 
                    [9] => Question 7?
                )

        )

    [3] => Array
        (
            [user_id] => User 4
            [questions] => Array
                (
                    [0] => Question 1?
                    [1] => Question 2?
                    [2] => Question 2?
                    [3] => Question 3?
                    [4] => Question 3?
                    [5] => Question 1?
                    [6] => Question 1?
                    [7] => Question 2?
                    [8] => Question 4?
                    [9] => Question 5?
                    [10] => Question 7?
                    [11] => Question 8?
                )

        )

    [4] => Array
        (
            [user_id] => User 5
            [questions] => Array
                (
                    [0] => Question 1?
                    [1] => Question 2?
                    [2] => Question 2?
                    [3] => Question 3?
                    [4] => Question 3?
                    [5] => Question 1?
                    [6] => Question 1?
                    [7] => Question 2?
                    [8] => Question 2?
                    [9] => Question 3?
                    [10] => Question 5?
                    [11] => Question 6?
                    [12] => Question 8?
                    [13] => 
                )

        )

)

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете зациклить массив $items с вопросами и сначала сохранить user_id, чтобы использовать его позже для индексации в массиве $result в качестве ключа.

Затем unset user_id поэтому у нас остались только вопросы.Проверьте, используется ли ключ уже в $result.Если это не так, создайте требуемую структуру массива для user_id и questions и добавьте первый массив вопросов.

Если ключ уже существует, объедините массив вопросов с существующим.

В конце используйте array_map и array_unique , чтобы удалить все повторяющиеся вопросы и используйте array_values ​​ для числового индексирования массива.

$result = [];

foreach ($items as $item) {
    $userId = $item['user_id'];
    unset($item['user_id']);
    if (!array_key_exists($userId, $result)) {
        $result[$userId] = [
            'user_id' => $userId,
            'questions' => array_values($item)
        ];
        continue;
    }
    $result[$userId]['questions'] = array_merge(
        array_values($result[$userId]['questions']),
        array_values($item)
    );
}

$result = array_values(array_map(function($y) {
    $y['questions'] = array_unique($y['questions']);
    return $y;
}, $result));

print_r($result);

Демо

0 голосов
/ 13 июня 2018

Вы можете создать другой массив со списком идентификаторов пользователей ($ userArr) и зациклить свой исходный массив меток ($ questionArray) и проверить массив идентификаторов пользователей.

$userArr = array();

// create array with user id list
foreach ($questionArray as $key1 => $outArr){ 
    foreach ($outArr as $key2 => $val){

        if($key2=='user_id'){
            $userArr[] = $val;
        }        
    }

}
$userArrUnique = array_unique($userArr);// make the array unique


foreach ($questionArray as  $key3 => $arr1){

    foreach ($userArrUnique as $key4 => $user){

        if($user == $arr1['user_id']){
            $finalArr[$key4]['user_id'] = $arr1['user_id'];
            $finalArr[$key4]['questions'][] = $arr1['question_1'];
            $finalArr[$key4]['questions'][] = $arr1['question_2'];
        }
    }
}

print_r($finalArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...