通过在标识列上分组,将二维数组行转换为合并的关联二维数组

问题描述 投票:0回答:3

这是我的多维数组。我想从中提取特定的

fields
并创建一个合并数组。

$array = [
    ['in_user_id' => 157, 'st_meta_key' => 'city',      'st_meta_value' => 'jaipur'],
    ['in_user_id' => 157, 'st_meta_key' => 'latitude'],
    ['in_user_id' => 157, 'st_meta_key' => 'longitude'],
    ['in_user_id' => 203, 'st_meta_key' => 'city',      'st_meta_value' => 'Jaipur'],
    ['in_user_id' => 203, 'st_meta_key' => 'latitude',  'st_meta_value' => '26.8517972'],
    ['in_user_id' => 203, 'st_meta_key' => 'longitude', 'st_meta_value' => '75.7862232'],
    ['in_user_id' => 214, 'st_meta_key' => 'city',      'st_meta_value' => 'Jaipur'],
    ['in_user_id' => 214, 'st_meta_key' => 'latitude',  'st_meta_value' => '26.8517972'],
    ['in_user_id' => 214, 'st_meta_key' => 'longitude', 'st_meta_value' => '75.7862232']
];

我想要这样的东西:

Array(
    [id] => 157,
    [city] => jaipur,
    [latitude] => '',
    [longitude] => '',
    [id] => 203,
    [city] => Jaipur,
    [latitude] => '26.8517972',
    [longitude] => '75.7862232',
    [id] => 214,
    [city] => Jaipur,
    [latitude] => '26.8517972',
    [longitude] => '75.7862232',
 )
php arrays multidimensional-array grouping
3个回答
0
投票
foreach ($run as $childArray) 
{ 

    if($childArray['st_meta_key'] == 'city'){
        $fin[$i] = array(
                'id' => $childArray['in_user_id'],
                'city' => $childArray['st_meta_value'],


                );
    }
    if($childArray['st_meta_key'] == 'latitude'){
        $fin[$i] = array(
                 'id' => $childArray['in_user_id'],
                'latitude' => $childArray['st_meta_value'],

                );
    }
    if($childArray['st_meta_key'] == 'longitude'){
        $fin[$i] = array(
                'id' => $childArray['in_user_id'],
                'longitude' => $childArray['st_meta_value'],

                );
    }
    if($childArray['st_meta_key'] == 'address'){
        $fin[$i] = array(
                'id' => $childArray['in_user_id'],
                'address' => $childArray['st_meta_value'],

                );
    }
    $i++; 
}
$arryc = 0;
foreach($fin as $key => $val){

   if(is_array($val)){

       foreach($val as $k => $v){

        if($k == 'id' && $k == $k)   {

               //$singleDimArray['id'] = $val['id'];
               if(!empty($val['city'])){
                $singleDimArray[$arryc]['id'] = $val['id'];
                  $singleDimArray[$arryc]['city'] = $val['city']; 
               }
               if(!empty($val['address'])){
                $singleDimArray[$arryc]['id'] = $val['id'];
                   $singleDimArray[$arryc]['address'] = $val['address'];
               }
               if(!empty($val['latitude'])){
                $singleDimArray[$arryc]['id'] = $val['id'];
                   $singleDimArray[$arryc]['latitude'] = $val['latitude'];
               }
               if(!empty($val['longitude'])){
                $singleDimArray[$arryc]['id'] = $val['id'];
                   $singleDimArray[$arryc]['longitude'] = $val['longitude'];
               }



            }

            $arryc++;
        }
   }

}

$arraysMerged = [];
$newarray=[];
   foreach($singleDimArray as $x){

    $arraysMerged = array_merge($arraysMerged, $x); 
    $newarray[$x['id']][]=$arraysMerged;
     }
    $FinL= array();
    foreach($newarray as $val){
       // print_r($newarray);
         $FinL[]= end($val);
    }

echo json_encode($FinL); }

}

0
投票

迭代每一行,使用 user_id 值作为第一级分组键,并将关联元素推入第二级。 如果没有值,则使用空合并运算符回退到空字符串。

代码:(演示

$result = [];
foreach ($array as $row) {
    $result[$row['in_user_id']][$row['st_meta_key']] = $row['st_meta_value'] ?? '';
}
var_export($result);

输出:

array (
  157 => 
  array (
    'city' => 'jaipur',
    'latitude' => '',
    'longitude' => '',
  ),
  203 => 
  array (
    'city' => 'Jaipur',
    'latitude' => '26.8517972',
    'longitude' => '75.7862232',
  ),
  214 => 
  array (
    'city' => 'Jaipur',
    'latitude' => '26.8517972',
    'longitude' => '75.7862232',
  ),
)

-1
投票
    $size = count($cars);//the array name 



for($i=0; $i<$size; $i++)
{

    $keyid= $cars[$i]['in_user_id'];
    $keyid1=$cars[$i++]['in_user_id'];
    //$keycity=$cars[$i]['st_meta_key']; echo "<br>";
    //$keylatitute=$cars[$i]['st_meta_value'];
    //echo $keyid. "<br>";
    if($keyid==$keyid1)
    {
        $j=$i+1;
        $first[] = array(

            'id' => $cars[$i]['in_user_id'],
            $cars[$i]["st_meta_key"]=>$cars[$i]['st_meta_value'],
            $cars[$j]["st_meta_key"]=>$cars[$j]['st_meta_value'],

         );
    }

}

$finalcount=count($first);

for ($k=0; $k <$finalcount ; $k++) { 


echo "<pre>";
print_r($first[$k]);
echo "</pre>";
}
© www.soinside.com 2019 - 2024. All rights reserved.