Jeeva
Jeeva

Reputation: 642

How to concatenate 2 strings in a multi dimensional array?

I've a muti dimensional array. I want to concatenate 2 strings separately for 2 array values and the 2 strings should not be concatenated for a single value. I want CM and PM concatenated 2 times any where in the array. I've tried looping the array and generating array_rand but i generates only once. Any help is much appreciated. Below is one example of what am achieving.

Thing am trying to achieve

For example: I've the below multi dimensional array.

Array
(
    [0] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )

    [1] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )

    [2] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )

    [3] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )

    [4] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )
)

After concatenating

Array
(
    [0] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C["PM"]
            [3] => Name-4["CM"]
            [4] => Name-5
        )

    [1] => Array
        (
            [0] => Name-A
            [1] => Name-B["PM"]
            [2] => Name-C
            [3] => Name-4["CM"]
            [4] => Name-5
        )

    [2] => Array
        (
            [0] => Name-A["PM"]
            [1] => Name-B
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5["CM"]
        )

    [3] => Array
        (
            [0] => Name-A["PM"]
            [1] => Name-B["CM"]
            [2] => Name-C
            [3] => Name-4
            [4] => Name-5
        )

    [4] => Array
        (
            [0] => Name-A
            [1] => Name-B
            [2] => Name-C["CM"]
            [3] => Name-4
            [4] => Name-5["PM"]
        )
)

Upvotes: 0

Views: 182

Answers (3)

Al-Amin
Al-Amin

Reputation: 656

I assume your inner array index is starting from zero. So generate the random index between 0 to your ( inner_array_size - 1). Then assign the value in the array's reference variable withing the loop.

foreach ($arr as &$value) {
    $randomIndex = array_rand(range(0, (count($value) -1) ), 2);
    $value[$randomIndex[0]] .= ' ["CM"]'; 
    $value[$randomIndex[1]] .= ' ["PM"]'; 
} 

Upvotes: 0

Dr DLP
Dr DLP

Reputation: 106

Sorry I didn't understand at first. Given $your_array:

// Generate an array where the names are the key, and assign a zero value to PM (0) and CM (1) in a sub array
$ar = array_fill_keys($your_array[0], array (0 => 0, 1 => 0));

//$array the sub_value, $add the case PM ou CM, $exclusion is the key used the first time
function rand_in_array($array, $add, $ar, $exclusion)
{   
    // Select a random key
    $arr_key = array_rand($array, 1);

    
    if($ar[$array[$arr_key]][$add] < 2 && ($arr_key !=  $exclusion))
    {
        return $arr_key;
    } 
    return rand_in_array($array, $add, $ar, $exclusion);    
}

for($i=0; $i<count($your_array);$i++) 
{
    
    $arr_key_pm = rand_in_array($your_array[$i], 0, $ar, 99);
    $ar[$your_array[$i][$arr_key_pm]][0]++;     
    $arr_key_cm = rand_in_array($your_array[$i], 1, $ar, $arr_key_pm);
    $ar[$your_array[$i][$arr_key_cm]][1]++;     

    $your_array[$i][$arr_key_pm] .= "PM";
    $your_array[$i][$arr_key_cm] .= "CM";
}

It is ugly but it works :) Somewhere should existe someone able to make more aesthetic..

Upvotes: 2

Dr DLP
Dr DLP

Reputation: 106

for($i=0; $i<count($your_array);$i++) 
{
    $arr_keys = array_rand($your_array[$i], 2);
    $your_array[$i][$arr_keys[0]] .= "PM";
    $your_array[$i][$arr_keys[1]] .= "CM";
}

Should do the work.

Upvotes: 0

Related Questions