Necrospasm
Necrospasm

Reputation: 11

PHP Find a value in a key and get the value of another key in a multi-dimentional array

Might be a newbie question but I've been trying to figure this problem and it's doing my head in.

I have the following array :

[0] => Array
    (
        [provisionalBookingRoomID] => 1
        [totalSpecificRoomCount] => 2
    )

[1] => Array
    (
        [provisionalBookingRoomID] => 2
        [totalSpecificRoomCount] => 5
    )

I need a php function that searches through the array for the value of 'provisionalBookingRoomID' and returns the value of 'totalSpecificRoomCount'

basically something like the following

getProvisionalTotalRoomsCount($currentRoom, $arrayOfRooms);
// getProvisionalTotalRoomsCount('1', $arrayOfRooms) should return 2;

Any ideas?

Upvotes: 0

Views: 77

Answers (4)

Kanishka Panamaldeniya
Kanishka Panamaldeniya

Reputation: 17586

$value = 0;
$array = array(array("provisionalBookingRoomID"=>1,"totalSpecificRoomCount"=>2),array("provisionalBookingRoomID"=>2,"totalSpecificRoomCount"=>5));

    array_map(
        function($arr) use (&$value) {

            if($arr['provisionalBookingRoomID']==1) {
                $value = $arr['totalSpecificRoomCount'];
            }           
        },$array
    );

    echo $value;

Upvotes: 0

Progrock
Progrock

Reputation: 7485

If you are likely to work with more than one value, you could build a new array with a 1->1 map for those attributes.

<?php

$items = array(
    array(
        'name' => 'Foo',
        'age'  => 23
        ),
    array(
        'name' => 'Bar',
        'age' => 47
        )
);

// Php 7
$name_ages = array_column($items, 'name', 'age');
echo $name_ages['Foo']; // Output 23

// Earlier versions:
$name_ages = array();
foreach($items as $value)
{
    $name_ages[$value['name']] = $value['age'];
}
echo $name_ages['Foo']; // Output 23

Upvotes: 0

Necrospasm
Necrospasm

Reputation: 11

For anyone looking for a generic function :

function findValueInArray($array, $searchValue, $searchKey, $requiredKeyValue) {
    foreach($array as $key=>$value){
        if($value[$searchKey] == $searchValue){
            return $value[$requiredKeyValue];
        }
    }
}

// Usage : findValueInArray($provisionalBookedRoomsArray, '1', 'provisionalBookingRoomID', 'totalSpecificRoomCount');

Upvotes: 0

Waqas Shahid
Waqas Shahid

Reputation: 1060

Check this:

getProvisionalTotalRoomsCount($currentRoom, $arrayOfRooms){
  foreach($arrayOfRooms as $key=>$value){
     if($value['provisionalBookingRoomID'] == $currentRoom){
            return $value['totalSpecificRoomCount'];
     }
  }
}

Upvotes: 4

Related Questions