如何从爆炸中获取数据并检查是否有相同的数据

时间:2018-05-25 03:24:58

标签: php explode

通过使现有数据等同来我的情况

我有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 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

$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

答案 1 :(得分:0)

我循环第一个数组并调用输出“result” 然后当我循环第二个时,我看到数据是否存在于结果数组中,然后我将它添加到结果中,否则我创建新项目。

$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