skip to Main Content

I want to fetch input from view file and split that number into digits and replace each digit to a specific alphabet and then store it in database,

can anyone help me in this problem

$data = [
            'product_id' => $productId,
            'vendor_id' => $vendor_id,
            'purchase_date' => $purchase_date,
            'landing_price' => $landing_price,
            'retail_price' => $retail_price,
            'wholesale_price' => $wholesale_price,
            'current_price' => $current_price,
            'vendor_current_price' => $vendor_current_price,
            'freight' => $freight
        ];

$numbers = str_split($wholesale_price);


$replaceNumbers = [
            1 => 'S',
            2 => 'H',
            3 => 'O',
            4 => 'N',
            5 => 'E',
            6 => 'L',
            7 => 'A',
            8 => 'P',
            9 => 'U',
            0 => 'R'
];
$replace = str_replace($numbers, $replaceNumbers, $numbers);

$JoinReplacedWord = join($replace);
var_dump($numbers, $replace, $JoinReplacedWord);
die;

but i am not getting the number replaced i am getting the array replaced to alphabet

result –

array(4) { 
    [0]=> string(1) "1" 
    [1]=> string(1) "4" 
    [2]=> string(1) "5" 
    [3]=> string(1) "0" 
} 
array(4) { 
    [0]=> string(1) "S" 
    [1]=> string(1) "H" 
    [2]=> string(1) "O" 
    [3]=> string(1) "N" 
} 
string(4) "SHON"

3

Answers


  1. use array_replace instead str_replace

        $wholesale_price = 98765;
    
        $numbers = array_flip(str_split($wholesale_price));
    
        $replaceNumbers = [
            1 => 'S',
            2 => 'H',
            3 => 'O',
            4 => 'N',
            5 => 'E',
            6 => 'L',
            7 => 'A',
            8 => 'P',
            9 => 'U',
            0 => 'R'
        ];
        $replace = array_slice(array_replace($numbers, $replaceNumbers), 0, count($numbers));
    
        $JoinReplacedWord = join($replace);
        var_dump($JoinReplacedWord);
        //you will see string(5) "UPALE"
        die;
    

    EDIT : bug fix for repeated digit example 88775

    $wholesale_price = 88775;
    
    $numbers = str_split($wholesale_price);
    //remove array_flip, because array flip will cause array just use last index when number have repeated digit 
    
    $replaceNumbers = [
        1 => 'S',
        2 => 'H',
        3 => 'O',
        4 => 'N',
        5 => 'E',
        6 => 'L',
        7 => 'A',
        8 => 'P',
        9 => 'U',
        0 => 'R'
    ];
    
    $string = "";
    foreach($numbers as $val){
        $string .= $replaceNumbers[$val];
    }
    
    var_dump($string);
    //you will see string(5) "PPAAE"
    die;
    
    Login or Signup to reply.
  2. I try to dig into this. According to your description, your code does exactly what you want it to do. It splits up $data['wholesale_price'] and has each character replaced as defined by $replaceNumbers. According to your output, your input number was ‘1450’.

    Do you mean by "i am not getting the number replaced" that $data is not refreshed? Then simply add $data['wholesale_price'] = $JoinReplacedWord;.

    Login or Signup to reply.
  3. If you just define your $replaceNumbers array slightly different your code will work

    $data = [
        'product_id' => 1,
        'vendor_id' => 2,
        'purchase_date' => '2021-12-12',
        'landing_price' => 123.45,
        'retail_price' => 234.56,
        'wholesale_price' => 12345678.90,
        'current_price' => 456.78,
        'vendor_current_price' => 567.89,
        'freight' => 111.22
    ];
    
    $replaceNumbers = ['R', 'S', 'H', 'O', 'N', 'E', 'L', 'A', 'P', 'U'];
    
    $numbers = str_split($data['wholesale_price']);
    
    $replace = str_replace($numbers, $replaceNumbers, $numbers);
    
    $JoinReplacedWord = join($replace);
    var_dump($numbers, $replace, $JoinReplacedWord);
    

    RESULT

    RSHONELAPU
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search