What are the differences between using str_replace and NumberFormatter for formatting numbers in PHP, and when should each method be preferred?

When formatting numbers in PHP, using str_replace is a simple way to replace characters in a string to format numbers. On the other hand, NumberFormatter is a more advanced tool that provides localized number formatting capabilities, such as currency symbols and decimal separators. NumberFormatter should be preferred when dealing with complex number formatting requirements or when localization is needed.

// Using str_replace to format a number
$number = 12345.67;
$formatted_number = str_replace(',', '.', number_format($number, 2));

echo $formatted_number;

// Using NumberFormatter for localized number formatting
$formatter = new NumberFormatter('en_US', NumberFormatter::DECIMAL);
$formatted_number = $formatter->format($number);

echo $formatted_number;