Reputation: 981
I have following array result :
Array (
[0] => company_1
[1] => company_10
[2] => company_15
)
I want the result something like this as I can use in the mysql IN
query clause:
$result = "1, 10, 15";
I use explode function but again it is returning both array values separately like this:
Array (
[0] => Array (
[0] => company
[1] => 1
)
[1] => Array (
[0] => company
[1] => 10
)
[2] => Array (
[0] => company
[1] => 15
)
)
But wondering how can I only get numbers separately?
Upvotes: 1
Views: 1741
Reputation: 47894
PHP has a native function for this sanitization task: filter_var_array()
.
Code: (Demo)
$array = [
'company_1',
'company_10',
'company_15',
];
var_export(
filter_var_array($array, FILTER_SANITIZE_NUMBER_INT)
);
Or if the prefix is always known and has the same length, then substr_replace()
will do. (Demo)
var_export(
substr_replace($array, '', 0, 8)
);
Output (from either snippet):
array (
0 => '1',
1 => '10',
2 => '15',
)
This array can then be passed into a prepared statement using advice found in: How can I bind an array of strings with a mysqli prepared statement?. There shouldbe no passing in of the value direct into an SQL string.
Upvotes: 0
Reputation: 41885
If your initial data is an array, just explode them again each them gather them inside then finally use implode. Example:
$result = array('company_1', 'company_10', 'company_15');
$result = array_map(function($piece){
return explode('_', $piece)[1]; // note: for php 5.4 or greater
// return str_replace('company_', '', $piece);
}, $result);
$result = implode(', ', $result);
echo $result; // 1, 10, 15
Upvotes: 3
Reputation: 160843
You have to pick the second part after you explode.
$result = array_map(function ($val) {
$tmp = explode('_', $val);
return isset($tmp[1]) ? $tmp[1] : null;
}, $array);
$result = implode(',', $result); // "1,10,5"
Upvotes: 1