Ze względu na dziwny zestaw okoliczności muszę określić, czy wartość istnieje w znanym zestawie, a następnie podjąć działanie. Rozważać:
Dołączony plik będzie wyglądał następująco:
// Start generated code
$set = array();
$set[] = 'foo';
$set[] = 'bar';
// End generated code
Wtedy inny plik będzie wyglądał następująco:
require('that_last_file.php');
if(in_array($value, $set)) {
// Do thing
}
Jak wspomniano, tablica zostanie utworzona z wygenerowanego kodu - proces utworzy plik PHP, który zostanie umieszczony nad instrukcją if
z require
.
Jak bardzo powinienem przejmować się rozmiarem tego bałaganu - zarówno w bajtach, jak i wartościach tablicowych? Z łatwością może osiągnąć 5000 wartości. Jak bardzo powinienem się przejmować narzutem tablicy o wartości 5000? Czy istnieje skuteczniejszy sposób wyszukiwania wartości, inny niż użycie in_array
w tablicy? Jak bolesne jest dołączenie pliku zawierającego 5000 wierszy za pośrednictwem require
?
Wiem, że istnieją lepsze sposoby na zrobienie tego, ale moje ograniczenia polegają na tym, że tworzenie zestawu i logika muszą znajdować się w dołączonym pliku PHP. Istnieją dziwne ograniczenia techniczne, które uniemożliwiają inne opcje (np. - przeszukiwanie bazy danych).
1 odpowiedź
Szybszym sposobem byłoby:
if (array_flip($set)[$value] !== null) {
// Do thing
}
Tablica wartości 5000 naprawdę nie jest taka zła, jeśli to tylko łańcuchy
array_flip
w połączeniu z isset
jest najwolniejszą opcją dla tablicy do 10k elementów. Zmodyfikowałem go na 3v4l.org/IhZ8F i in_array
jest nadal znacznie szybszy. Tak więc, dla kompletności: co zrobiłem źle w tym prostym teście?
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.
$set['foo'] = true;
?