From 291b5081432c90fc629bcf9f3326aed3347e7b19 Mon Sep 17 00:00:00 2001 From: Fredrik Sundin Date: Wed, 19 Aug 2020 22:41:08 +0000 Subject: [PATCH 1/3] Replace array_search to optimize large arrays --- src/SimpleXLSXGen.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/SimpleXLSXGen.php b/src/SimpleXLSXGen.php index 46a83e4..0d0b346 100644 --- a/src/SimpleXLSXGen.php +++ b/src/SimpleXLSXGen.php @@ -162,6 +162,7 @@ class SimpleXLSXGen { } $SI = []; + $SI_KEYS = []; $COLS = []; $ROWS = []; if ( count($this->rows) ) { @@ -212,10 +213,15 @@ class SimpleXLSXGen { } else { $ct = 's'; // shared string $v = str_replace(['&','<','>'],['&','<','>'], $v); - $cv = array_search( $v, $SI, true ); + $cv = false; + if ( isset($SI_KEYS[$v]) ) { + $cv = $SI_KEYS[$v]; + } + if ( $cv === false ) { $SI[] = $v; $cv = count( $SI ) - 1; + $SI_KEYS[$v] = $cv; } } } elseif ( is_int( $v ) || is_float( $v ) ) { From 22cbd84f3c688a44cfbc5f9b82d758e6188bf6e8 Mon Sep 17 00:00:00 2001 From: Fredrik Sundin Date: Wed, 19 Aug 2020 22:48:12 +0000 Subject: [PATCH 2/3] Add strict compare --- src/SimpleXLSXGen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SimpleXLSXGen.php b/src/SimpleXLSXGen.php index 0d0b346..1ebe59c 100644 --- a/src/SimpleXLSXGen.php +++ b/src/SimpleXLSXGen.php @@ -214,7 +214,7 @@ class SimpleXLSXGen { $ct = 's'; // shared string $v = str_replace(['&','<','>'],['&','<','>'], $v); $cv = false; - if ( isset($SI_KEYS[$v]) ) { + if ( isset($SI_KEYS[$v]) && $SI_KEYS[$v] === $v ) { $cv = $SI_KEYS[$v]; } From c3d64d13ef3b02629730f248557589cfa557b531 Mon Sep 17 00:00:00 2001 From: Fredrik Sundin Date: Wed, 19 Aug 2020 23:09:33 +0000 Subject: [PATCH 3/3] Fix strict compare bug --- src/SimpleXLSXGen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SimpleXLSXGen.php b/src/SimpleXLSXGen.php index 1ebe59c..fc2c42b 100644 --- a/src/SimpleXLSXGen.php +++ b/src/SimpleXLSXGen.php @@ -214,7 +214,7 @@ class SimpleXLSXGen { $ct = 's'; // shared string $v = str_replace(['&','<','>'],['&','<','>'], $v); $cv = false; - if ( isset($SI_KEYS[$v]) && $SI_KEYS[$v] === $v ) { + if ( isset($SI_KEYS[$v]) && $SI[$SI_KEYS[$v]] === $v ) { $cv = $SI_KEYS[$v]; }