2

私はここに配列を持っています:

$array = array(
                    array('t'=>'t1','v'=>'001'),
                    array('t'=>'t2','v'=>'002'),
                    array('t'=>'t3','v'=>'003'),
                    array('t'=>'t1','v'=>'004'),
                    array('t'=>'t4','v'=>'005'),
                    array('t'=>'t2','v'=>'006'),
                    array('t'=>'t5','v'=>'007'),
                    array('t'=>'t3','v'=>'008'),
            );

私が欲しい最後の配列はこれです:

array(
    't1' => array('v'=>array(001,004)),
    't2' => array('v'=>002),
    't3' => array('v'=>array(003,008)),
    't4' => array('v'=>005),
    't5' => array('v'=>006),
    't6' => array('v'=>007)
)

PHP配列操作関数を使用して最終的な配列を実現する方法はありますか?ループ(forまたはforeach)を使用したくありません。usort()を使用してみましたが、どこにも行きません

これがユーザー定義関数を呼び出す私のusortコードです:

public function sort($a,$b)
{   
    $const = array();
    $temp1 = array();
    $temp2 = array();
    //echo $a['t'].":".$a['v'] . " - " . $b['t'].":".$b['v']. "<br/>";
    if($a['t'] == $b['t']){
        $temp1[$a['t']] = array($a['v'],$b['v']);
        //$const = $temp1;          
    }else{
        if(!array_key_exists($a['t'],$temp1) && !array_key_exists($b['t'],$temp1)){
            $temp2[$a['t']] = array($a['v']);
            $temp2[$b['t']] = array($b['v']);
        }
    }

    $result = array_merge($temp1, $temp2);

    print_r($result);
}
4

3 に答える 3

2
$array = array(
    array('t'=>'t1','v'=>'001'),
    array('t'=>'t2','v'=>'002'),
    array('t'=>'t3','v'=>'003'),
    array('t'=>'t1','v'=>'004'),
    array('t'=>'t4','v'=>'005'),
    array('t'=>'t2','v'=>'006'),
    array('t'=>'t5','v'=>'007'),
    array('t'=>'t3','v'=>'008'),
);

$res   = array();
foreach($array as $val){
   $res[$val['t']]['v'][] = $val['v'];
}

echo "<pre>";
print_r($res);

出力:

Array
(
    [t1] => Array
        (
            [v] => Array
                (
                    [0] => 001
                    [1] => 004
                )

        )

    [t2] => Array
        (
            [v] => Array
                (
                    [0] => 002
                    [1] => 006
                )

        )

    [t3] => Array
        (
            [v] => Array
                (
                    [0] => 003
                    [1] => 008
                )

        )

    [t4] => Array
        (
            [v] => Array
                (
                    [0] => 005
                )

        )

    [t5] => Array
        (
            [v] => Array
                (
                    [0] => 007
                )

        )

)
于 2013-03-25T11:30:44.210 に答える
0

試してみてください:

$input  = array( /* your data */ );
$output = array();

foreach ( $input as $value ) {
  $t = $value['t'];
  $v = $value['v'];

  if ( !isset($output[$t]) ) {
    $output[$t] = array('v' => $v);
  } else if ( is_array($output[$t]['v']) ) {
    $output[$t]['v'][] = $v;
  } else {
    $output[$t]['v'] = array($output[$t]['v'], $v);
  }
}
于 2013-03-25T11:32:44.657 に答える
0
<?php
$array = array(
                array('t'=>'t1','v'=>'001'),
                array('t'=>'t2','v'=>'002'),
                array('t'=>'t3','v'=>'003'),
                array('t'=>'t1','v'=>'004'),
                array('t'=>'t4','v'=>'005'),
                array('t'=>'t2','v'=>'006'),
                array('t'=>'t5','v'=>'007'),
                array('t'=>'t3','v'=>'008'),
        );

  foreach ($array as $key => $row) {
$t[$key] = $row['t'];
$v[$key] = $row['v'];
}
  array_multisort($v, SORT_ASC, $array);

$reqArray = array();
foreach($array  as $value)
{
  $reqArray[$value['t']]['v'][] = $value['v'];
}

print_r($reqArray);

?>
于 2013-03-25T11:37:46.627 に答える