3

how can i do below in php ?

I have two inputs $bankdata and $databasedata.

Problem:

Split word in string if it matches with other string word

String which has more spaces will be treated as base string in below case $databasedata would be treated as base string and then it will be compared with $bankdata with each word and then split DHANA and LAKSHMI and then rewrite

$bankdata = DHANA LAKSHMI K

For Example :

Input :  
 $bankdata      = 'DHANALAKSHMI  K' 
 $databasedata  = 'DHANA LAXMI KOILADA'

Output :  
 $bankdata      = 'DHANA LAKSHMI  K'  //This willchanged
 $databasedata  = 'DHANA LAXMI KOILADA'

Input : 
 $bankdata      = 'P VENKATESWARA RAO' 
 $databasedata  = 'PARELLA VENKATESWARARAO'

Output :  
 $bankdata      = 'P VENKATESWARA RAO' 
 $databasedata  = 'PARELLA VENKATESWARA RAO' //This willchanged

Input : 
 $bankdata      = 'LINGAREDDY S' 
 $databasedata  = 'LINGA REDDY SHEELAM'

Output :  
 $bankdata      = 'LINGA REDDY S'   //This will changed 
 $databasedata  = 'LINGA REDDY SHEELAM'

Input : 
 $bankdata      = 'ROSHAN LAL' 
 $databasedata  = 'ROSHANLAL X'

Output :  
 $bankdata      = 'ROSHAN LAL' 
 $databasedata  = 'ROSHAN LAL X' //This will changed
James Z
  • 12,209
  • 10
  • 24
  • 44

2 Answers2

2
<?php

function swap(&$bankdata, &$databasedata)
{
    // get the spaces from each word
    // we use preg_replace to remove additional spaces in any of the words.
    $bank_arr = explode(' ', preg_replace('/\s+/', ' ', $bankdata));
    $data_arr = explode(' ' , preg_replace('/\s+/', ' ', $databasedata));

    $bank_space_count = count($bank_arr);
    $data_space_count = count($data_arr);

    $fixUp = function ($words, $with)
    {
        $patterns = [];
        $replacements = [];
        foreach($with as $each_word) {
            // skip single characters
            if (strlen($each_word) == 1) {
                continue;
            }

            $patherns[] = "/{$each_word}(\w\s+)?/";
            $replacements[] = "$0 ";
        }

        return preg_replace($patherns, $replacements, $words);
    };


    if ($bank_space_count >= $data_space_count) {
        $databasedata = $fixUp($databasedata, $bank_arr);
    }
    else {
        $bankdata = $fixUp($bankdata, $data_arr);
    }
}

$bankdata      = 'DHANALAKSHMI  K';
$databasedata  = 'DHANA LAXMI KOILADA';

swap($bankdata, $databasedata);


var_dump($bankdata, $databasedata);

3v4l HERE
Edited 3v4l

Ghostff
  • 1,407
  • 3
  • 18
  • 30
  • when i am passing `DB INPUT : RAJARANI MOHANRAO , BANK INPUT : RAJA MOHAN` getting output as `DB OUTPUT : RAJARANI MOHANRAO , BANK OUTPUT : RAJA MOHAN` expected output DB OUTPUT is **RAJA RANI MOHAN RAO** can you help me out –  Feb 25 '19 at 07:11
1

Hello @Daoootim this code will check words in another string and replace it with additional space. You need to make more conditions, because it is very straight forward. I hope it helps.

$bankdata      = 'P VENKATESWARARAO RAO' ;
$databasedata  = 'PARELLA VENKATESWARARAORAO';
echo 'INPUT: ' . $databasedata . '<br>';
echo 'INPUT: ' . $bankdata . '<br>';
$inputArray1 = explode(' ',$bankdata);
$inputArray2 = explode(' ',$databasedata);

foreach ($inputArray1 as $word) {
    if (strlen($word) > 1){
        foreach ($inputArray1 as $reference) {
            if ($reference != $word){
                if (strpos($reference,$word) > 0) continue 2;
            }
        }
        $databasedata = str_replace($word, $word." ",$databasedata);
    }
}
foreach ($inputArray2 as $word) {
    if (strlen($word) > 1){
        foreach ($inputArray2 as $reference) {
            if ($reference != $word){
                if (strpos($reference,$word) > 0) continue 2;
            }
        }
        $bankdata = str_replace($word, $word." ",$bankdata);
    }
}
echo 'OUTPUT: ' . $databasedata . '<br>';
echo 'OUTPUT: ' . $bankdata . '<br>';

INPUT: PARELLA VENKATESWARARAORAO

INPUT: P VENKATESWARARAO RAO

OUTPUT: PARELLA VENKATESWARARAO RAO

OUTPUT: P VENKATESWARARAO RAO

JohnnyB1988
  • 178
  • 9
  • when i am passing ` **DB INPUT:** VARUN SURYAKANT LLOYD **BANK INPUT** : SURYA VARU LLOYD **DB OUTPUT** : VARU N SURYA KANT LLOYD . BANK OUTPUT:SURYA VARU LLOYD ` Issue is that **VARUN** gets splits in **VARU N** which should not split –  Feb 25 '19 at 06:37
  • The code works as supposed. In Bank input, you have word VARU. – JohnnyB1988 Feb 26 '19 at 07:12
  • ok you are right `$dbdata = GAURE LAL AHIRWAR,$bankdata = GORELAL AHIRWAR` **Output** - `$bankdata = GORE LAL AHIRWAR` –  Feb 26 '19 at 07:42
  • `$dbdata = M DEEPA, $bankdata= MDEEPA` , **$bankdata = M DEEPA** can you please suggest so that i can close the answer –  Feb 27 '19 at 09:12
  • thinking to change this `if (strlen($word) > 1)` this will work does this will make any impact –  Feb 27 '19 at 09:26