假设您有一个像这样的PHP数组,来自mysqli查询:
$array = (
'user_id' => 1
'user_name' => 'User',
'user_email' => 'mail@user.com'
);
现在我想创建一个用户类的实例.构造函数采用数组,但键应为’id’,’name’和’email’.
编辑上面数组的最快方法是什么,这样我得到一个像这样的新数组:
$newArray = (
'id' => 1
'name' => 'User',
'email' => 'mail@user.com'
);
$user = new User($newArray);
当然,我可以简单地遍历原始的$数组并使用preg_replace(),如下所示:
$newArray = array();
foreach ($array as $key => $value) {
$newKey = preg_replace('/^user_/', '', $key);
$newArray[$newKey] = $value;
}
但肯定有更快的方法可以解决这个问题吗?目前我想不出一个好方法,这就是我在这里结束的方式.
解决方法:
如果你担心性能,不要用正则表达式进行琐碎的操作,它们本身就很慢.除此之外,由于您正在积极修改密钥,除了重建新数组之外别无他法:
$params = [];
foreach($array as $key => $value)
$params[substr($key, 5)] = $value;
在这段代码中,substr($key,5)只删除每个键的前导user_部分,并将$params数组重建为你需要的数组.如果有更快的解决方案,我会非常惊讶.
如果您确实要检查数据完整性并仅提取正确的前缀键,则问题会变得更加复杂:
function extractPrefixedElements(array $array, $prefix)
{
$result = [];
foreach($array as $key => $value)
{
list($pre, $newKey) = explode('_', $key, 2);
if($pre == $prefix)
$result[$newKey] = $value;
}
return $result;
}
extractPrefixedElements($array, 'user');
标签:php,arrays,replace,array-key
来源: https://codeday.me/bug/20190831/1773459.html