Saswat
Saswat

Reputation: 12846

Shuffle second array in PHP so that it is not identical to the first

I have two arrays like this:-

Array $a
(
    [0] => Array
        (
            [video_id] => 1
            [video_title] => A1
            [video_type] => 2
            [user_id] => 7
            [video_link] => /challenge_video_1490082018-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490082017-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [1] => Array
        (
            [video_id] => 2
            [video_title] => A2
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490082526-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490082526-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [2] => Array
        (
            [video_id] => 3
            [video_title] => A3
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490083750-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490083750-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [3] => Array
        (
            [video_id] => 4
            [video_title] => A4
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490084089-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490084089-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [4] => Array
        (
            [video_id] => 5
            [video_title] => A5
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490084344-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490084344-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [5] => Array
        (
            [video_id] => 6
            [video_title] => A6
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490086316-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490086316-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [6] => Array
        (
            [video_id] => 7
            [video_title] => A7
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490087497-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490087497-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

)

Array $b
(
    [0] => Array
        (
            [video_id] => 1
            [video_title] => A1
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490082018-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490082017-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [1] => Array
        (
            [video_id] => 2
            [video_title] => A2
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490082526-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490082526-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [2] => Array
        (
            [video_id] => 3
            [video_title] => A3
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490083750-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490083750-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [3] => Array
        (
            [video_id] => 4
            [video_title] => A4
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490084089-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490084089-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [4] => Array
        (
            [video_id] => 5
            [video_title] => A5
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490084344-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490084344-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [5] => Array
        (
            [video_id] => 6
            [video_title] => A6
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490086316-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490086316-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

    [6] => Array
        (
            [video_id] => 7
            [video_title] => A7
            [video_type] => 2
            [user_id] => 7
            [video_link] => challenge/challenge_video_1490087497-user_uservideo.mov
            [video_image] => challenge/challenge_video_1490087497-Image.png
            [video_like] => 0
            [user_username] => sujan
            [user_image] => 
            [likeCount] => 0
            [fanCount] => 0
            [followCount] => 0
        )

)

I want to create a third array $c in such a way that $a[0]['video_id'] will never be $b[0][video_id'];

For this, I am writing this code:-

for($i = 0; $i < count($a); $i++)
{
     if($a[i]['video_id'] != $b[i]['video_id'])
     {
         $c[] = $b[i];
     }
     else
     {
         // fetch some other row from the rest of the rows//
     }
}

How can I do this? Also, if $b can be shuffled in the desired manner, then I may not need a third array $c. How can I achieve this?

Upvotes: 0

Views: 42

Answers (1)

Justinas
Justinas

Reputation: 43507

Use shuffle to shuffle array.

while (compareArrays($a, $b) == true) {
    shuffle($b);
}

$c = $b;

/**
 * return bool - True if equal, false if not.
 */
function compareArrays($a, $b) {
    for($i = 0; $i < count($a); $i++) {
        if($a[i]['video_id'] != $b[i]['video_id']) {
            return false;
        }
    }

    return true;
}

What to do if arrays contains 1 element or is empty? You can't shuffle single-element array this way.

Upvotes: 1

Related Questions