bugfix> php > 投稿

私は既存のデータを同等にすることでケースを持っています

私はこのような形式の2つのデータを持っています

$data1 = "144|aku|1!!!122|dia|2";  data description "id|name|amount"
$data2 = "144|aku|1!!!211|dia|1";

2つの配列に同じデータがあり、量セクションに同じデータを作成する方法を追加でき、等しくないデータが配列に挿入されます

2つの配列をこのようにする方法

$data_result  = "144|aku|2!!!122|dia|2!!!211|dia|1";

これは私の完全なスクリプト

$data1 = "144|aku|1!!!122|dia|2";
$data2 = "144|aku|1!!!211|dia|1";

    $simpan_array = array();
    $array_status = array();
               // Pecah Array dari user dulu
               $array_code_user =  explode('!!!', $data1 );
               $jumlah_item_user = count($array_code_user) - 1;
               $x = 0;
               // Pecah Array dari lokal
               $array_cart_local   = explode('!!!',$data2 );
               $jumlah_cart_local  = count($array_cart_local) - 1;
               $j = 0;
                while( $x <= $jumlah_item_user ) {
                    $ambil_datacart_user = explode( '|', $array_code_user[$x] );
                        $idproduk_user   = $ambil_datacart_user[0];
                        $namaprod_user   = $ambil_datacart_user[1];
                        $jumprod_user    = $ambil_datacart_user[2];
                        $simpan_array_0 = $idproduk_user.'|'.$namaprod_user.'|'.$jumprod_user;
                        while( $j <= $jumlah_cart_local ) {
                            $ambil_datacart_lokal = explode( '|', $array_cart_local[$j] );
                                $idprod_lokal     = $ambil_datacart_lokal[0];
                                $namaprod_lokal   = $ambil_datacart_lokal[1];
                                $jumprod_lokal    = $ambil_datacart_lokal[2];
                                $simpan_array_1 = $idprod_lokal.'|'.$namaprod_lokal.'|'.$jumprod_lokal;
                                //Disamakan
                                    if( $idproduk_user == $idprod_lokal ) {
                                        $jumtotal = $jumprod_user + $jumprod_lokal;
                                        $simpan_array[] = $idprod_lokal.'|'.$namaprod_lokal.'|'.$jumtotal;
                                        $array_status[] = 1;
                                    } else {
                                        $simpan_array[] = $simpan_array_1;
                                        $array_status[] = 0;
                                    }
                          $j++;
                        }
                  $x++;      
                }
              $jumlah = array_sum($array_status);
              $array_jadi = join("!!!",$simpan_array);
              //$datakembali = $array_jadi;
              if ( $jumlah == 0 ) {
                        $datakembali = $simpan_array_1.'!!!'.$array_jadi;
               } else {
                        $datakembali = $array_jadi;
               }
               echo $datakembali;
               ?>

回答 2 件
  • 最初の配列をループし、出力を「結果」と呼びます。
    次に、2番目のループをループするときに、データが結果配列に存在するかどうかを確認し、結果にそれを追加します。そうでない場合は、新しいアイテムを作成します。

    $array1 = explode("!!!", $array1);
    $array2 = explode("!!!", $array2);
    Foreach($array1 as $val){
        List($id, $name, $amount) = explode("|", $val);
        $result[$id] = ['name' => $name, 'amount' => $amount];
    }
    Foreach($array2 as $val){
        List($id, $name, $amount) = explode("|", $val);
        If(isset($result[$id])){
            $result[$id]['amount'] += $amount;
        }Else{
            $result[$id] = ['name' => $name, 'amount' => $amount];
        }
    }
    
    

    https://3v4l.org/gQjTj

    私はあなたのフォーマットへの変換を含めませんでした。
    すべてのパイプと感嘆符が付いたかわいい形式ですが、json_encode()を使用することを強くお勧めします。
    これにより、自家製の関数を使用せずに簡単に再度デコードできる文字列が作成されます。
    こちらhttps://3v4l.org/IEhspをご覧ください

  • 次のようなことができます:

    $array1 = "144|aku|1!!!122|dia|2";
    $array2 = "144|aku|1!!!211|dia|1";
    //Convert the string into array by explode
    $array1 = explode( '!!!', $array1 );
    $array2 = explode( '!!!', $array2 );
    //Merge the 2 arrays
    $merged = array_merge($array1,$array2);
    //Group the array using foreach
    //Loop thru the array and group using the id as key
    $grouped = array();
    foreach( $merged as $key => $val ) {
        $val = explode( '|', $val );                                     //Convert the string into array
        if ( !isset( $grouped[ $val[0] ] ) ) $grouped[ $val[0] ] = $val; //If key does not exist, initialise the data
        else $grouped[ $val[0] ][2] += $val[2];                          //If key already exist, just add the third value
    }
    //Format the grouped array into string
    foreach( $grouped as $key => $val ) {
        $grouped[ $key ] = implode( '|', $val );
    }
    $result = implode( '!!!', $grouped );
    echo $result;
    
    

    これは次の結果になります。

    144|aku|2!!!122|dia|2!!!211|dia|1
    
    

あなたの答え