PHP에서 Array_Column 함수는 종종 다차원 배열에서 열에서 데이터를 추출하는 데 사용됩니다. 그러나 경우에 따라 Array_Column을 사용하면 성능 문제가 발생할 수 있습니다. 특히 큰 배열에서의 빈번한 작업이 필요할 때. 이 문제의 핵심은 Array_Column 이 원래 배열을 여러 번 통과한다는 것입니다. 결과를 캐시하지 않으면 반복적 인 횡단 및 불필요한 성능 소비로 이어질 수 있습니다. 이 기사는 캐시 정책을 통해 Array_Column을 사용할 때 반복적 인 배열을 피하는 방법을 탐색하여 성능을 향상시킵니다.
다음 샘플 코드를 고려하십시오.
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
$names = array_column($array, 'name');
이 예에서는 Array_Column이 $ 배열 배열을 한 번 반복하고 각 서브 어레이에서 이름 열을 추출합니다. 이 작업 자체는 특히 비싸지 않지만 다른 열을 여러 번 추출하거나 큰 배열에서 Array_Column을 반복적으로 사용해야하는 경우 불필요한 반복적 인 트래버스가 발생하여 성능에 영향을 미칩니다.
배열의 반복적 인 순회를 피하기 위해 열이 처음 추출 될 때 캐시에 결과를 저장할 수 있습니다. 다음에 동일한 열이 필요할 때는 array_column을 호출하지 않고 캐시에서 직접 읽습니다.
캐시의 가장 쉬운 방법은 배열을 사용하여 이미 추출 된 열을 저장하는 것입니다. 예를 들어:
// 캐시 어레이를 초기화합니다
$cache = [];
function getColumnFromCache($array, $column, &$cache) {
// 열이 이미 캐시에 있는지 확인하십시오
if (!isset($cache[$column])) {
// 열이 캐시에없는 경우,사용 array_column 데이터를 얻으십시오,결과를 캐시합니다
$cache[$column] = array_column($array, $column);
}
return $cache[$column];
}
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
// 캐시에서 얻습니다 'name' 목록
$names = getColumnFromCache($array, 'name', $cache);
print_r($names);
// 再次캐시에서 얻습니다 'name' 목록,반복적 인 횡단을 피하십시오
$namesAgain = getColumnFromCache($array, 'name', $cache);
print_r($namesAgain);
이 예에서 GetColumnfromCache 함수는 먼저 특정 열의 데이터가 $ Cache 어레이에 저장되었는지 확인합니다. 데이터가 캐시 된 경우 캐시 된 결과는 직접 반환됩니다. 그렇지 않으면 array_column은 열 데이터를 가져 와서 캐시에 저장하도록 호출됩니다.
애플리케이션이 크고 여러 요청에서 동일한 데이터 열을 자주 추출 해야하는 경우 Redis 또는 Memcached와 같은보다 효율적인 캐싱 체계를 사용해보십시오.
예를 들어, Redis에서 캐시 열 데이터를 사용하는 코드는 다음과 같습니다.
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
function getColumnFromRedis($array, $column, $redis) {
// 조사하다 Redis 中是否已缓存该목록
$cachedColumn = $redis->get($column);
if ($cachedColumn === false) {
// 만약에 Redis 中没有缓存该목록,사용 array_column 데이터를 얻으십시오
$cachedColumn = json_encode(array_column($array, $column));
// 결과를 저장하십시오 Redis
$redis->set($column, $cachedColumn);
}
return json_decode($cachedColumn, true);
}
// 샘플 데이터
$array = [
['id' => 1, 'name' => 'Alice', 'age' => 25],
['id' => 2, 'name' => 'Bob', 'age' => 30],
['id' => 3, 'name' => 'Charlie', 'age' => 35]
];
// 얻다 'name' 목록
$names = getColumnFromRedis($array, 'name', $redis);
print_r($names);
Redis를 통한 캐시 된 열 데이터의 이러한 방식은 동일한 데이터, 특히 빈번한 액세스 시나리오에서 반복 된 작업을 크게 줄일 수 있습니다.
캐싱 정책을 사용함으로써 Array_Column을 사용할 때 동일한 데이터의 여러 통과를 효과적으로 피할 수 있으므로 성능이 향상됩니다. 소규모 응용 프로그램의 경우 간단한 메모리 캐시 (예 : 배열)를 사용하는 것으로 충분합니다. 대규모 애플리케이션의 경우 Redis 또는 Memcached와 같은 캐시 시스템을 사용하여 성능 및 확장 성을 더욱 향상시킬 수 있습니다. 올바른 캐싱 체계를 선택하면 특히 많은 양의 데이터를 처리 할 때 프로그램의 효율성을 크게 최적화 할 수 있습니다.