PHP Array - Выберите объект на основе установленных параметров - PullRequest
0 голосов
/ 25 февраля 2012

Я использую php-скрипт для отслеживания позиций своих iPhone в проекте.Сценарий, который я использую, можно найти здесь на github .Однако проблема, с которой я сталкиваюсь, заключается в том, что она отслеживает устройства.Мой ноутбук И мой iPhone.Я хочу, чтобы он отслеживал только iPhone, но мне нужна возможность легко переключаться между двумя устройствами в случае необходимости;другими словами, я хочу, чтобы приоритет был отдан для отслеживания iPhone, а не ноутбука.Поэтому я подумываю использовать «deviceClass», чтобы определить, какое устройство выбрать, но я не знаю, как добавить его в файл: class.sosumi.php Вот вывод массива:1006 *

    Sosumi Object
(
    [devices] => Array
        (
            [0] => SosumiDevice Object
                (
                    [isLocating] => 1
                    [locationTimestamp] => **
                    [locationType] => Wifi
                    [horizontalAccuracy] => 65
                    [locationFinished] => 1
                    [longitude] => **
                    [latitude] => **
                    [deviceModel] => MacBookPro7_1
                    [deviceStatus] => 200
                    [id] => **
                    [name] => **
                    [deviceClass] => MacBookPro
                    [chargingStatus] => 
                    [batteryLevel] => 0
                )

            [1] => SosumiDevice Object
                (
                    [isLocating] => 1
                    [locationTimestamp] => **
                    [locationType] => Wifi
                    [horizontalAccuracy] => 65
                    [locationFinished] => 1
                    [longitude] => **
                    [latitude] => **
                    [deviceModel] => FourthGen
                    [deviceStatus] => 203
                    [id] => **
                    [name] => **
                    [deviceClass] => iPhone
                    [chargingStatus] => NotCharging
                    [batteryLevel] => 0.5866984
                )

        )

   )

Любая помощь в выяснении, как получить эту работу будет принята с благодарностью.Это кажется легким, но по какой-то причине я не могу заставить его работать.

Приветствия!

1 Ответ

1 голос
/ 25 февраля 2012

Я не уверен, ясно ли я понял ваш вопрос, но вам нужно либо:

array_filter

Что позволит вам фильтровать ваш массив следующим образом:

// Reference is implicit (I've added & for you to see it)!!!
// Be careful not to change your data
functon filterCallback( SosumiDevice &$obj){ 
    return $obj->deviceClass == 'MacBookPro';
}

usort

Сортировка массивов, которые первыми являются MacBook

function usortCallback( SosumiDevice $a, SosumiDevice $b){
    static $order = array(
         'MacBookPro' => 1,
         'FourthGen' => 2,
         ...
    );

    $oA = isset( $order[ $a->deviceClass]) ? $order[ $a->deviceClass] : -100;
    $oB = isset( $order[ $b->deviceClass]) ? $order[ $b->deviceClass] : -100;

    // Maybe reverse order of operands will be necessary
    return $oA - $oB;
}

Это добавляет классы значений следующим образом:

  • MacBookPro => 1
  • FourGen => 2

Поэтому при добавлении таких параметров, как: MacBookPro, FourthGen

Он оценивается как: 1 - 2, что возвращает -1 => MacBookPro должно быть раньше FourthGen

foreach петля

Разделение устройств на группы в зависимости от типа устройства:

$groups = array();
foreach( $this->devices as $device){
    if( !isset( $groups[ $device->deviceType])){
        $groups[ $device->deviceType] = array( $device);
        continue;
    }
    $groups[ $device->deviceType] = $device;
}

Вы можете добиться того же с фильтром массива, это будет более эффективно, если вам нужно получить все группы, array_filter, когда вам нужен только один gruop.

...