Accessing array within an array in multiple database rows - php

I have a database structure that looks like the following:
I am trying to store the prices as a variables so that if I reference cage_linear_feet it will display 225.
I have tried the following code:
$sql = "SELECT * from pricing WHERE region = '$region' ";
$result = mysqli_query($conn, $sql);
while($rows=mysqli_fetch_assoc($result)){
$test[] = array($rows['field']=>$rows['price']);
}
print_r ($test);
This displays the following:
Array ( [0] => Array ( [cage_linear_feet] => 225 ) [1] => Array ( [cage_doors] => 1800 ) )
How do I access the "225" and "1800" values ensuring that if more records are added to the db it will still pick up the correct records. E.g as the $test1 which is cage_doors may change if records are added.

My opinion is that there is no point in wrapping the key-value pairs in their own separate arrays. I would change this line:
$test[] = array($rows['field']=>$rows['price']);
to this:
$test[$rows['field']] = $rows['price'];
The data association will be maintained in the key=>value pairs of one associative array ($test). So echo $test['cage_linear_feet'] ---> 225

If you want to set field as the array-key
$sql = "SELECT * from pricing WHERE region = '$region' ";
$result = mysqli_query($conn, $sql);
while($rows=mysqli_fetch_assoc($result)){
$test[$rows['field']] = $rows['price']);
}
print_r ($test);
No you should be able to reference by field like so:
echo $test['cage_doors'];
// returns 1800

Is the column 'field' unique? If so, do this:
while($rows=mysqli_fetch_assoc($result)){
$test[$rows['field']] = $rows['price'];
}
This will set the key in the array to the field, i.e.
Array('cage_doors' => 1800)
If its not unique, I recommend doing something like:
while($rows=mysqli_fetch_assoc($result)){
$test[$rows['field'] . '_' . $rows['pricing_id']] = $rows['price'];
}
This will set the key in the array to the field and the pricing id, which makes it unique, i.e.
Array('cage_doors_2' => 1800)

Related

merge two columns into an array

I want to merge two of my columns (yanlis_cevaplar, cevap_icerik) into an array and this code here gives me only one column in array when I print it (yanlis_cevaplar).
How do I fix it?
$cevaplar = "SELECT yanlis_cevaplar FROM cevaplar";
$cevap_sonuc = $conn->query($cevaplar) or die(mysqli_error($conn));
$cevap1 = array(); //create empty array
while ($row = $cevap_sonuc->fetch_array()) { //loop to get all results
$cevap1[] = $row; //grab everything and store inside array
}
$cevaplar2 = "SELECT cevap_icerik FROM cevaplar";
$cevap_sonuc2 = $conn->query($cevaplar) or die(mysqli_error($conn));
$cevap2 = array(); //create empty array
while ($row = $cevap_sonuc2->fetch_array()) { //loop to get all results
$cevap2[] = $row; //grab everything and store inside array
}
$tumcevaplar = array_merge($cevap1, $cevap2);
print_r($tumcevaplar);
Instead of making multiple queries, you can just fetch all the columns you want in one single query:
$cevaplar = "SELECT yanlis_cevaplar, cevap_icerik FROM cevaplar";
$cevap_sonuc = $conn->query($cevaplar) or die(mysqli_error($conn));
// Now you can fetch all the rows straight away without any loop.
// The MYSQLI_ASSOC will return each row as an associative array
$result = $cevap_sonuc->fetch_all(MYSQLI_ASSOC);
print_r($result);
This will result in something like this:
Array
(
[0] => Array
(
[yanlis_cevaplar] => some value
[cevap_icerik] => some value
)
[1] => Array
(
[yanlis_cevaplar] => some value
[cevap_icerik] => some value
)
... and so on ..
)
If this isn't what you want, then you need to show us an example.
I also recommend that you go through some basic SQL tutorials. How SELECT works is SQL 101. Here's one of many guides: https://www.tutorialspoint.com/mysql/mysql-select-query.htm

Make Associative array with three element in array

I want three element in associative array, so far am successful in getting two in the array.
$sql = "SELECT * FROM `notification_table` ";
$resultsd1 = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($resultsd1);
$associativeArray = array();
while ($row = mysqli_fetch_assoc($resultsd1))
{
$associativeArray[$row['name']] = $row['price'] ;
}
foreach($associativeArray as $k => $id){
echo $k."=>".$id .' ';
}
And am getting the response like this
name1=>24.725 name2=>24.265
Now i want to add another column in array as well and the name is column is notification_check .
Am not able to get how to add three columns in a single array. Any help will be appreciated.
I want the output like name1=>24.725=>yes_notification name2=>25.43=>no_notification
And when i print_r($row) is show this output Array ( [sno] => 1 [name] => name1 [price] => 23 [notification_check] => yes_notification)
You could shorten this and use mysqli_fetch_all to create an array of all of the data and then manipulate the array using array_column to create the index...
$result = mysqli_fetch_all($resultsd1, MYSQLI_ASSOC);
$associativeArray = array_column($result, null, 'name');

Associative array not storing first result from SQL

I have a database in MySQL and I'm using this query to select certain rows from it using PHP:
$q = "SELECT Number, Body
FROM boxes
WHERE Number BETWEEN '1' AND '4' ORDER BY Number ASC";
Then calling the query and initiating arrays:
$r = $mysqli->query($q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
$array = array();
$content = array();
Then attempting to sort the results into an associative array where the 'number' is the key and the 'body' is the value.
while ($row = mysqli_fetch_assoc($r)) {
$array = array(
$content[$row['Number']] = $row['Body']
);
This works fine except it will not store the first value. This is the result of print_r($content);, missing the first row.
Array ( [2] => This is entry two [3] => This is entry three [4] => This is entry four )
I have tried running the SQL query within PHPMyAdmin and it returns all four rows as I would expect.
Does anyone have any ideas what I'm doing wrong?
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
You are getting first returned row by this line. You have to remove it and it will work properly.
mysqli_fetch_array and mysqli_fetch_assoc returning NEXT row on every call.

Add onto an array with the key and value

I've looked for days and to no avail. I can't find a function which could add to an array with the key and value.
Here's why I need it: I need an array to store both the name of the owner and the type of the car. I'd like for the key to be the name of the owner and the type of the car to be the value and not have to use two arrays to contain something which one array can.
Here's my current code:
Function used to get $vehicleName
function carName($nakedCarString)
{
$cars=(separateString($array, $vehicleString));
return $cars[0];
}
The above code uses a vehicle string, gets the name of the car with an array and returns the name of the car in a string. Not an array.
Code(which requires code to add to array with key and value) which will be adding info to array
while($row = mysql_fetch_array($result))
{
$vehicleString = $row['Vehicle'];
$vehicleName = carName($vehicleString);
$seller = steamID2CommunityID($row['Auctioneer']);
$name = new SteamAPI($seller);
$sellername = $name->getFriendlyName();
}
The above code gets each row in a mysql table and foreach row it'd get the vehicle string, the name of the car from vehicle string using function above, the seller and the sellers name(in string, not array)
I'd need it so that it could add to an array($carIndex) with the key($sellername) and value($vehicleName). Any help?
You are overcomplicating this:
$cars= array();
while($row = mysql_fetch_array($result))
{
$seller = steamID2CommunityID($row['Auctioneer']);
$name = new SteamAPI($seller);
$sellername = $name->getFriendlyName();
$cars[$sellername] = carName($row['Vehicle']);
}
you mean
$carIndex[$sellerName] = $vehicleName;
I would not recommend you to use the name as a key in the array, as it might contain invalid characters, why don't you use a multi-dimensional array instead:
$cars = array();
while($row = mysql_fetch_array($result))
{
$array = array();
$vehicleString = $row['Vehicle'];
$array['vehicleName'] = carName($vehicleString);
$seller = steamID2CommunityID($row['Auctioneer']);
$name = new SteamAPI($seller);
$array['sellerName'] = $name->getFriendlyName();
$cars[] = $array;
}
Exmaple output:
Array (
[0] => Array
(
['vehicleName'] => "Ford"
['sellerName'] => "John Sr."
)
[1] => Array
(
['vehicleName'] => "Audi"
['sellerName'] => "Jane-Doe"
)
)

mysql and php associative array

I have this table:
Username, Fan, Count
1danny22, katana1973, 2
bob, rita, 2
mattyhacky, hayley, 2
mattyhacky, dickie1eye, 1
mattyhacky, xxjodiexx, 1
And I want to load it into an associative array which would looks like this:
Array (
[1danny22] => Array (
[katana1973] => 2,
),
[bob] => Array (
[rita] => 2,
),
[mattyhacky] => Array (
[hayley] => 2,
[dickie1eye] => 1,
[xxjodiexx] = > 1,
)
)
$strSQL = "SELECT username, fan, count( * ) AS intCount
FROM fan
GROUP BY username, fan
ORDER BY username, intCount DESC";
$strResult = mysql_query($strSQL);
while($objRow=mysql_fetch_object($strResult))
{
code should go in here!!!
}
But I'm really struggling.
Can someone please help?
Many thanks
TheBounder.
Easy peasy...
$sql = "SELECT Username, Fan, Count FROM datatbl";
$res = mysql_query($sql);
while ($row = mysql_fetch_object($res))
$data[$row->Username][$row->Fan] = $row->Count;
I should explain further. What your doing here is creating a base index for your data array that uses the common associate Username as the index. Within that index you have another array, this using the Fan as the index and the value of each item being the count. My above example is the easiest way to build the structure that you are looking at.
Now if you run a print_r on the array you will see the structure you defined.
assuming your initial array is in $data, with for instance
$data[0] = array("1danny22", "katana1973", 2);
you could go with
$output = array();
foreach($data as $line) {
$output[$line[0]][$line[1]] = $line[2];
}
You could build it programmatically from the returned result... bare bones example:
$ar = array();
$result = mysql_query("SELECT * FROM your_table");
while ($ar[] = mysql_fetch_assoc($result));
print_r($ar);

Categories