2

私はこのような配列を持っています。

[11] => Array
    (
        [transactioncurrencyid] => Array
            (
                [!name] => US Dollar
                [!] => {041E3DC9-D938-DD11-982C-0013724C58B7}
            )

        [smi_processingmonth] => Array
            (
                [!date] => 6/1/2011
                [!time] => 2:27 PM
                [!] => 2011-06-01T14:27:00-07:00
            )

        [smi_cchistoryid] => {678C5036-9EAA-E111-88E0-00155D010302}
        [smi_includeindeal] => Array
            (
                [!name] => No
                [!] => 0
            )

                  [smi_locationid] => Array
            (
                [!name] => 1134 Hooksett Rd
                [!] => {5CC1585B-91AA-E111-88E0-00155D010302}
            )
    )

[12] => Array
    (
        [transactioncurrencyid] => Array
            (
                [!name] => US Dollar
                [!] => {041E3DC9-D938-DD11-982C-0013724C58B7}
            )


        [smi_processingmonth] => Array
            (
                [!date] => 5/1/2011
                [!time] => 2:27 PM
                [!] => 2011-05-01T14:27:00-07:00
            )

        [smi_cchistoryid] => {688C5036-9EAA-E111-88E0-00155D010302}
        [smi_includeindeal] => Array
            (
                [!name] => No
                [!] => 0
            )

        [smi_locationid] => Array
            (
                [!name] => 1134 Hooksett Rd
                [!] => {5CC1585B-91AA-E111-88E0-00155D010302}
            )
    )

場所ID、次にsmi_processingmonthでグループ化するにはどうすればよいですか?

だから私はこのようなものを手に入れます

[1134 Hooksett Rd] => Array
    (
        [ 5/1/2011] = array(
            [transactioncurrencyid] => Array
            (
                [!name] => US Dollar
                [!] => {041E3DC9-D938-DD11-982C-0013724C58B7}
            )


            [smi_processingmonth] => Array
                (
                    [!date] => 5/1/2011
                    [!time] => 2:27 PM
                    [!] => 2011-05-01T14:27:00-07:00
                )

            [smi_cchistoryid] => {688C5036-9EAA-E111-88E0-00155D010302}
            [smi_includeindeal] => Array
                (
                    [!name] => No
                    [!] => 0
                )

            [smi_locationid] => Array
                (
                    [!name] => 1134 Hooksett Rd
                    [!] => {5CC1585B-91AA-E111-88E0-00155D010302}

             )
           )
         [1/1/2011] = array(
          [transactioncurrencyid] => Array
            (
                [!name] => US Dollar
                [!] => {041E3DC9-D938-DD11-982C-0013724C58B7}
            )

        [smi_processingmonth] => Array
            (
                [!date] => 6/1/2011
                [!time] => 2:27 PM
                [!] => 2011-06-01T14:27:00-07:00
            )

        [smi_cchistoryid] => {678C5036-9EAA-E111-88E0-00155D010302}
        [smi_includeindeal] => Array
            (
                [!name] => No
                [!] => 0
            )

                  [smi_locationid] => Array
            (
                [!name] => 1134 Hooksett Rd
                [!] => {5CC1585B-91AA-E111-88E0-00155D010302}
            )
            )
    )

私が試してみました

   foreach($array as $keys)
                {

                    $key =  $keys['smi_processingmonth']['!date'];;
                    if (!isset($groups[$key])) 
                    {
                        $groups[$key] =  array($keys);
                    } else {
                        $groups[$key][] = $keys;
                    }
                }
                $newGroups = array();

                if(is_array($groups))
                {
                    foreach($groups as $cats => $values)
                    {

                        foreach($values as $itemValues){
                            $st = rtrim(trim($itemValues['smi_locationid']['!']));
                                $key = $st;
                                if (!isset($newGroups[$key])) 
                                {
                                    $newGroups[$key] = array($groups);

                                } else {
                                    $newGroups[$key][] = $itemValues;
                                }
                            }
                        }
                    }

ありがとう!

4

3 に答える 3

3

いくつかの変更を加えたヨハンからの引用:

  • すでにトリムを使用している場合は、ltrimを避けてください
  • 関数を入れると、一時変数を使用して読みやすさを維持できます
  • 最後の[]を追加して、元のリクエストからの厄介な$ name / $ dateの衝突を回避しますが、より安全です
function compactArray($data)
{
    $new_structure = array();
    foreach ( $data as $row ) 
      {
        $name = trim($row['smi_locationid']['!name']);
        $date = trim($row['smi_processingmonth']['!date']);
        $new_structure[ $name ][ $date ][] = $row;
    }
    return $new_structure;
}
于 2012-06-29T14:03:22.650 に答える
1

ええと、私はそれをテストしていません。しかし、それだけではありません:

$new_structure = array();
foreach ( $data as $row ) {
  $key1 = rtrim(trim($row['smi_locationid']['!name']));
  $key2 = rtrim(trim($row['smi_processingmonth']['!date']));
  $new_structure[$key1][$key2] = $row;
}

このコードではいくつかの isset() を使用できますが、わかりやすくするためにそれらを除外することにしました。

于 2012-06-29T09:32:54.590 に答える
0

以下は、正しくソートされた目的の出力配列を生成します。

function transaction_datecmp($tran1, $tran2)
{
   return strtotime($tran1['smi_processingmonth']['!']) -
          strtotime($tran2['smi_processingmonth']['!']);
}

$output_arr = array();
foreach ($input_arr as $transaction) {
   $location = $transaction['smi_locationid']     ['!name'];
   $date     = $transaction['smi_processingmonth']['!date'];
   $output_arr[$location][$date] = $transaction;
}
ksort($output_arr); // sorts by location
foreach ($output_arr as &$transaction_arr) {
   uasort($transaction_arr, 'transaction_datecmp');
}

あなたのデータ構造は、同じ日に 2 つのトランザクションが存在しないという前提に依存していますが、これはやや危険な前提です。また、場所をキーとして使用することは理想とはほど遠いものです (綴りや場所の変更などのため) - 紙の郵送のように本当に物事をグループ化する必要がある場合を除きます。

文字列の処理などのデータのクリーンアップは、trimm事前に、理想的にはデータ入力時に行う必要があります。

于 2012-06-29T09:54:27.303 に答える