FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Fast/Easy way to extract a column from multi-dimensional array?
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
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 Go to previous messageGo to previous message
J.O. Aho is currently offline  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
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: approaches to PHP-based application interface?
Next Topic: php+html mixup in displaying multidimensional array in html tables
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Sat Nov 23 02:47:05 GMT 2024

Total time taken to generate the page: 0.05837 seconds