|
Posted by Jochem Maas on 10/12/05 21:17
Id like to continue where TG left off ...
hth.
tg-php@gryffyndevelopment.com wrote:
> If I understand what you're asking, then maybe this will help:
>
> $arrset1 = array("Apples" => 3, "Oranges" => 5, "Apricots" => 1);
> $arrset2 = array("Couches" => 6, "Chairs" => 2, "Benches" => 5);
>
> $alldataarr["Fruits"] = $arrset1;
> $alldataarr["Furniture"] = $arrset2;
>
> Say we want to remove "Chairs", and let's do it the hard way:
>
> foreach ($alldataarr as $key => $data) {
> foreach ($data as $subkey => $subdata) {
> if ($subkey == "Chairs) {
> unset($alldataarr[$key][$subkey]);
> }
> }
> }
>
> using foreach $arr as $key => $data you can get the key/index name as well as the actual value stored in that part of your array. Then all you have to do is refer back up to the main array using the current $key/$subkey values as your indexes.
>
$filter = array(
'Fruits' => array('Apples' => 1, 'Oranges' => 1),
'Furniture' => array('Couches' => 1, 'Chairs' => 1),
);
$alldataarr = array();
$alldataarr["Fruits"] = array("Apples" => 3, "Oranges" => 5, "Apricots" => 1);
$alldataarr["Furniture"] = array("Couches" => 6, "Chairs" => 2, "Benches" => 5);
foreach ($alldataarr as $key => $data) {
if (!isset($filter[$key]) {
// we want it all;.
continue;
}
$alldataarr[$key]= array_intersect_keys($data, $filter[$key]);
}
// heres one I prepared earlier:
/**
* array_intersect_keys()
* ^--- the internal function (php5.x+?) has no 's'
*
* returns the all the items in the 1st array whose keys are found in any of the other arrays
*
* @return array()
*/
function array_intersect_keys()
{
$args = func_get_args();
$originalArray = $args[0];
$res = array();
if(!is_array($originalArray)) { return $res; }
for($i=1;$i<count($args);$i++) {
if(!is_array($args[$i])) { continue; }
foreach ($args[$i] as $key => $data) {
if (isset($originalArray[$key]) && !isset($res[$key])) {
$res[$key] = $originalArray[$key];
}
}
}
return $res;
}
>
> Basic example, but I think you can modify this to work with what you're doing.
>
> Let me know if you have any questions about this example.
>
> -TG
>
>
>
> = = = Original message = = =
>
> Hi all,
>
> I'm really struggling here! I have a large, multi-dimensional array that
> I want to "clean-up" a bit before committing to a database.
>
> I want to remove quite a bit of the array but using the KEYs not the
> values. I know the keys I want to keep and I know the keys I want to get
> rid of. I want to keep the structure and sequence of the array in tact.
>
> All of the array traversing functions in PHP seem to either: only work
> on the values, or do not allow the removal of elements of the array!
>
> Can anyone offer a clue bat to a tired old array walker!
>
> Thanks
>
> Alan
>
>
> ___________________________________________________________
> Sent by ePrompter, the premier email notification software.
> Free download at http://www.ePrompter.com.
>
[Back to original message]
|