Re: Fast/Easy way to extract a column from multi-dimensional array? [message #176832 is a reply to message #176831] |
Fri, 27 January 2012 20:50 |
J.O. Aho
Messages: 194 Registered: September 2010
Karma:
|
Senior Member |
|
|
John Drako wrote:
> I'm looking for a way to get all the values from the column of a two
> dimensional array.
>
> For example, I have a query on a mysql database that returns 10 rows
> from the database, I would like to quickly (read low cpu load) extract
> all the IDs from all the rows returned to reuse in another query.
>
> So let's say I use:
>
> $arr = mysqli_fetch_all($result, MYSQLI_ASSOC);
>
> and $arr looks like:
>
> RecordID, name, last name, title
> RecordID, name, last name, title
> RecordID, name, last name, title
> RecordID, name, last name, title
> RecordID, name, last name, title
> RecordID, name, last name, title
> etc...
>
> I need to get all the 'RecordID' from the results to reuse in other
> queries.
>
> Is there a built in PHP function (compiled code) to accomplish this?
> I've read the definitions of all the functions related to arrays and if
> it exists, I didn't find it.
There is no function which will do it, but there are ways to make it quite simple
<?php
// Assume we got the values out of the database
$arr = array(
array('RecordID' => 1, 'name' =>'A'),
array('RecordID' => 2, 'name' =>'B'),
array('RecordID' => 3, 'name' =>'C'),
array('RecordID' => 4, 'name' =>'D'),
array('RecordID' => 5, 'name' =>'E')
);
// this is a function which will only get the RecordID
function getRecordID($item, $key, $newarray) {
if($key == 'RecordID')
$newarray[]= $item;
}
// This is the array where to store the IDs
$arr_of_id = array();
// here we do fetch all the IDs
array_walk_recursive($arr, 'getRecordID',&$arr_of_id);
// Here you see we got them all
var_dump($arr_of_id);
?>
> The site is very busy and CPU cycles count. I'm trying to avoid left
> joining three gigantic tables.
I think you will need less CPU with the left join, I suggest you look at
"having" if you want to use a smaller range in the joins.
Don't forget, if you have something you fetch often and which seldom changes,
it can be wise to cache those somewhere (either use MySQLs built in cache or
memcached or similar).
--
//Aho
|
|
|