Sembra che quello che devi fare riduca a normalizzare la struttura dei dati, e metti semplicemente ['company'][$id]
davanti a ogni% di% di utilizzo. Ovviamente potresti usare find & sostituisci (con uno strumento come AstroGrep), ma .. Tempo per qualche terminologia.
refactoring.
In primo luogo, il Refactor ti consente di deformare la tua mente più facilmente, sostanzialmente ristrutturando il problema in modo che sia molto semplice da risolvere, quindi basterà utilizzare la nuova funzionalità.
Il refactoring sta cambiando il design del codice di base interno per soddisfare meglio le (nuove) richieste. Che si tratti di prestazioni, stabilità o persino leggibilità. Aggiungere / cambiare funzionalità potrebbe essere messo sotto lo stesso ombrello ma non lo farei: di solito questa è la cosa che si attiva in pochi minuti dopo il refactoring.
Un esempio ..
Quindi quando refactro faccio not cambiare le funzionalità, faccio solo un punto in cui posso facilmente avviarlo, in un secondo momento. Tutte le funzionalità sono mantenute identiche.
Avrei tutte le ricerche in quell'array passare attraverso un posto centrale, una funzione come:
/**
* Central customers lookup method, to aid implementing future functionality.
* @param array $array The original array.
* @param Integer $companyid Optional. If given $array['company'][$companyid] must exist.
* @return array The $array parameter or a subset thereof.
*/
function GetCompanyCustomers($array, $companyid=null) {
if ($companyid==null) {
// Old approach
return $array;
} else {
// Example doublechecks for debugging
if (!isset($array['company'])) {
echo 'Error! GetCompanyCustomers() $array["company"] does not exist.';
}
if (!isset($array['company'][$companyid])) {
echo 'Error! GetCompanyCustomers() $array["company"][$companyid] does not exist.';
}
// New approach
return $array['company'][$companyid];
}
}
Questo facilita la transizione.
In primo luogo si inserisce questa funzione (e un setter, forse) dappertutto e si assicura che tutto funzioni esattamente come prima, quindi si passa effettivamente all'utilizzo di $ companyid. Anche annullare le modifiche dovrebbe essere semplice, basta modificare di nuovo la funzione. Prendi in considerazione l'impostazione di setter corrispondenti.
Ulteriori consigli:
Di solito non è una buona idea avere una matrice così grande che contenga tutti i dati, che viene riempita di nuovo per ogni richiesta del browser. Espone un cattivo design fondamentale. A meno che non sia necessario mostrare tutti i dati contemporaneamente su una pagina.
Tieni presente che i tuoi dati vengono normalizzati in modo che parti della ricerca siano auto-descrittive e autonome. Usa i modelli di dati per escludere l'accesso esterno, una matrice può essere efficiente a volte ma può morderti soprattutto in un linguaggio non tipizzato come PHP. Quello che ho fatto ora con il getter potrebbe (o dovrebbe ..) essere inserito in una classe (DataModel che rappresenta).