在数据库查询的 IN() 条件中使用数组之前,请从数组元素中删除非数字前缀

问题描述 投票:0回答:3

我有以下数组结果:

Array (
    [0] => company_1
    [1] => company_10
    [2] => company_15
) 

我想要这样的结果,因为我可以在

mysql IN
查询子句中使用:

$result = "1, 10, 15";

我使用爆炸函数,但它再次分别返回两个数组值,如下所示:

Array (
    [0] => Array (
        [0] => company
        [1] => 1
    )
    [1] => Array (
        [0] => company
        [1] => 10
    )
    [2] => Array (
        [0] => company
        [1] => 15
    )
)   

但是想知道如何才能单独获取数字?

php mysql arrays prefix sanitization
3个回答
3
投票

如果你的初始数据是一个数组,只需再次爆炸它们,将它们收集在里面,最后使用内爆。示例:

$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

1
投票

爆炸后必须选择第二部分。

$result = array_map(function ($val) {
  $tmp = explode('_', $val);
  return isset($tmp[1]) ? $tmp[1] : null;
}, $array);

$result = implode(',', $result); // "1,10,5"

-1
投票

PHP 有一个用于此清理任务的本机函数:

filter_var_array()

代码:(演示

$array = [
    'company_1',
    'company_10',
    'company_15',
];
var_export(
    filter_var_array(
        $array,
        FILTER_SANITIZE_NUMBER_INT,
    )
);

输出:

array (
  0 => '1',
  1 => '10',
  2 => '15',
)

然后可以使用以下建议将该数组传递到准备好的语句中:如何将字符串数组与 mysqli 准备好的语句绑定?。 不应将值直接传递到 SQL 字符串中。

© www.soinside.com 2019 - 2024. All rights reserved.