简体   繁体   中英

php include array vs mysql query: good idea?

I have an 2D array with a few sub-arrays (about 30, and sub-arrays have 10 elements). I need to get quite frequently basic data from the array , I have a function that return the contents of it (or partial) all around my scripts. The function looks like:

function get_my_data($index = false){
$sub0 = array(
   'something' => 'something',
   'something else' => 'else',
   ...
    );
$sub1 = array(
   'something' => 'something different',
   'something else' => 'else different',
   ...
    );
...
$sub30 = array(
   'something' => 'something 30 times different',
   'something else' => 'else 30 times different',
   ...
    );
$data = array($sub0,$sub1,$sub2,...,$sub30);
if($index !== false)
return $data[$index];
else
return $data;
?>

And then I call to it using include:

<?php
include 'my_data.php';
$id = $_GET['id'];
$mydata = get_my_data($id);
...
?>

I've done this because when I was starting this project, I didn't imagined I would have more that 10 sub-arrays, and I neither that I would need to have it dynamic. In fact, now I have to add a dynamic column (an index to sub-arrays) and it is not a great idea to use array declaration in this case. I immediately thought to use database, transferring data would not difficult, but if I do that, then I need to change my function get_my_data and insert a query in it, so, for it's called many times, I would have a lot of queries, pretty much every script of my website have one of it. I think performance would be worst (cause mysql is already largely used in my website). The dynamic data would change not too frequently (client do that).

The ideas I have to solve this problem are:

  • save all data in database and get it through mysql queries,
  • leave on php side and use files to manage dynamic data,
  • leave the static part on php side, add a logical connector (such 'id' index in sub-arrays) and id column in mysql database, and get the dynamic data on mysql

I don't want to lose much performance, do yo have any advice or suggestions?

Putting data like this in code is the worst possible plan. Not only do you create a whole bunch of junk and then throw out almost all of it, but if any of this changes it's a nightmare to maintain. Editing source code, checking it into version control, and deploying it is a lot of work to make a simple change to some data.

At the very least store this in a data format like JSON, YAML or XML so you can read it in on-demand and change a data-only file as necessary.

Ideally you put this in a database and query against it when necessary. Databases are designed to store, update, and preserve data like this.

You can also store JSON in the database, MySQL 5.7 even has a native column type for it, which makes this sort of thing even easier.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM