I have photo array like
JavaScript
x
$array=[['key1' => 'a', 'key2'=>'duplicate']['key1' =>'b', 'key2'=>'duplicate']]
I need it like
JavaScript
$array=[['key1' => 'a', 'key2'=>'duplicate-x57gg']['key1' =>'b', 'key2'=>'duplicate-hdd67']]
How to do it in php
Advertisement
Answer
is it what you look for ?
this is working code, you can copy to test the output and try modify the $array
to test different output.
JavaScript
//random number generator
function generateRandomString($length = 10, $excluded=[]) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
if(in_array($randomString,$excluded)){
$randomString = generateRandomString($length,$excluded);
}
return $randomString;
}
$array=[['key1' => 'a', 'key2'=>'duplicate'],['key1' =>'b', 'key2'=>'duplicate'],['key1' =>'c', 'key2'=>'non-duplicate'],['key1' =>'d', 'key2'=>'duplicate']];
$array_loop = $array;//for looping use
$RANDOM_STRING_USED =[];
foreach($array_loop as $index => $a){
//get duplicated array
$arr_duplicated = array_filter($array,function($v) use ($a){
//exlude self
if($v['key1'] != $a['key1'] && $v['key2'] == $a['key2']){
return true;
}
});
//set randome string to duplicated array
$is_duplicated = false;
foreach($arr_duplicated as $dup){
//get index of array
$key = array_search($dup['key1'], array_column($array, 'key1'));
$rand_str = generateRandomString(4,$RANDOM_STRING_USED);//in case random string occur
$RANDOM_STRING_USED[] = $rand_str;
$array[$key]['key2'] .= '-'.$rand_str;
$is_duplicated = true; //set to true, for update current array as well
}
//if duplicated, update current array as well
if($is_duplicated){
$rand_str = generateRandomString(4,$RANDOM_STRING_USED);//in case random string occur
$RANDOM_STRING_USED[] = $rand_str;
$array[$index]['key2'] .= '-'.generateRandomString(4,$RANDOM_STRING_USED);
}
}
echo '<pre>';
print_r($array);
echo '</pre>';