We have string
$somestring = '11;11;11;12;13';
and array
$somearray = [
11 => ['prop' => [11], 'uid' => 1],
21 => ['prop' => [12], 'uid' => 2],
32 => ['prop' => [11], 'uid' => 1],
34 => ['prop' => [11], 'uid' => 2],
35 => ['prop' => [13], 'uid' => 1],
36 => ['prop' => [13], 'uid' => 3],
37 => ['prop' => [12], 'uid' => 1],
38 => ['prop' => [12], 'uid' => 3],
39 => ['prop' => [12], 'uid' => 1],
];
How to get from $somearray [uid] on condition that value of [prop] is equal same value in $somestring and output it by filled rows like this:
row1:11(uid:1);11(uid:1);11(uid:2);12(uid:2);13(uid:1)
row2:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:3)
row3:11(uid:);11(uid:);11(uid:);12(uid:3);13(uid:)
row4:11(uid:);11(uid:);11(uid:);12(uid:1);13(uid:)
Just copy it and execute,
<?php
error_reporting(0);
$somestring = '11;11;11;12;13';
$somearray = array(
11 => array(
prop => array(0=>11),
uid => 1,
),
21 => array(
prop => array(0=>12),
uid => 2,
),
32 => array(
prop => array(0=>11),
uid => 1,
),
34 => array(
prop => array(0=>11),
uid => 2,
),
35 => array(
prop => array(0=>13),
uid => 1,
),
36 => array(
prop => array(0=>13),
uid => 3,
),
37 => array(
prop => array(0=>12),
uid => 1,
),
38 => array(
prop => array(0=>12),
uid => 3,
),
39 => array(
prop => array(0=>12),
uid => 1,
),
);
$sme_array = explode(";",$somestring);
$somestrarray = array_unique($sme_array);
$res = array();
foreach($somearray as $key=>$val){
foreach($somestrarray as $value){
if($val['prop'][0] == $value){
$res[$value][] = $val['uid'];
}
}
}
$cnt_values = array_count_values($somestrarray);
$num_loop = 1;
foreach($cnt_values as $key=>$val){
$num_loop = (count($res[$key])/$val) > $num_loop?(count($res[$key])/$val):$num_loop;
}
for($i=0; $i<$num_loop; $i++){
echo "row".($i+1).":";
foreach($sme_array as $vals){
if(array_key_exists($vals,$res)){
echo $vals."(uid:".$res[$vals][0].");";
array_shift($res[$vals]);
}
}
echo "<br>";
}
?>