【发布时间】:2021-03-11 11:55:23
【问题描述】:
简单示例数组:
$arr = [
['id' => 1, 'name' => 'cat 1'],
['id' => 2, 'name' => 'cat 2'],
['id' => 3, 'name' => 'cat 1']
];
第一个解决方案
public static function searchForCat($array, $k,$value) {
foreach ($array as $key => $val) {
if (trim(strtolower($val[$k])) === trim(strtolower($value))) {
return $val;
}
}
return null;
}
第二个解决方案
$categoryKey = array_filter($dataArray, function ($cat, $k) use ($value, $key) {
return
trim(strtolower($cat[$key])) == trim(strtolower($value));
}, ARRAY_FILTER_USE_BOTH);
第三种解决方案
$key = array_search($product[$staticAttr['Category Name']], array_column($categories, 'name'));
if($key)
$category = $categories[$key];
第四个解决方案
public static function search_array_kv( $array, $key, $value )
{
$results = array();
if ( !is_array( $array ) ) return;
foreach ( $array as $array_value )
{
if ( !is_array( $array_value ) ) continue;
foreach ( $array_value as $subarray )
{
if ( !isset( $subarray[ $key ] ) ) continue;
if ( trim(strtolower($subarray[ $key ])) == trim(strtolower($value ))) $results[] = $subarray;
}
}
return current($results);
}
我有超过 30 万个类别,我正在迁移 100 万个产品,每个产品都会调用上述搜索三到四次来获取类别、子类别和品牌名称。以上哪种解决方案会更有效?任何快速的解决方案都会非常受欢迎。
【问题讨论】:
-
您是否对其中任何一个进行了基准测试?
-
@MarkusZeller 第一次尝试了上述所有方法,第三次更好
-
你也许应该使用数据库和基本的选择查询。
-
@Syscall 无法为单个产品创建三四分贝连接。
-
@mickmackusa ok 将从 db 中添加小写字母。请查看其他部分
标签: php arrays search multidimensional-array