示例#1
0
 public static function &getData(&$layer)
 {
     //Используется в propcheck.js
     if (!isset($layer['json'])) {
         return $layer['data'];
     }
     $data = @$layer['json'];
     if (Each::isAssoc($data) === false) {
         //Если массив то это просто строка в виде данных
         $data = Load::loadTEXT($data[0]);
     } elseif (is_string($data)) {
         $data =& Load::loadJSON($data);
         //Забираем для текущего клиента что-то..
     }
     return $data;
 }
示例#2
0
文件: Mark.php 项目: infrajs/catalog
 private function rksort(&$data)
 {
     ksort($data);
     foreach ($data as &$v) {
         if (!is_array($v)) {
             continue;
         }
         if (Each::isAssoc($v) === true) {
             self::rksort($v);
         }
         //else sort($v);
     }
 }
示例#3
0
        $r = null;
        return $r;
    });
    return $now;
}, 'external' => function (&$now, &$ext) {
    //Используется в global.js, css
    if (!$now) {
        $now = array();
    } elseif (Each::isAssoc($now) !== false) {
        $now = array(&$now);
    }
    array_push($now, $ext);
    return $now;
}, 'config' => function (&$now, &$ext, &$layer) {
    //object|string any
    if (Each::isAssoc($ext) === true) {
        if (!$now) {
            $now = array();
        }
        foreach ($ext as $j => $v) {
            if (!is_null(@$now[$j])) {
                continue;
            }
            $now[$j] =& $ext[$j];
        }
    } else {
        if (is_null($now)) {
            $now =& $ext;
        }
    }
    return $now;
示例#4
0
文件: EachTest.php 项目: infrajs/each
 public function testEach()
 {
     /**
      * Проверка на ассоциативный массив.
      * Метод возвращает true только в том случае, если массив ассоциативный.
      */
     $elements = ['9' => '42', 8, 4, 5, 3];
     $res = Each::isAssoc($elements);
     $this->assertTrue($res);
     $elements = 10;
     $res = Each::isAssoc($elements);
     $this->assertTrue(null === $res);
     $elements = [9, 8, 4, 5, 3];
     $res = Each::isAssoc($elements);
     $this->assertTrue(false === $res);
     /**
      * Проверка на число.
      * Если передано число в текстовом формате, то метод должен отработать
      * с этим аргументом как с числом.
      */
     $el = '';
     $res = Each::isInt($el);
     $this->assertTrue(false === $res);
     $el = 12;
     $res = Each::isInt($el);
     $this->assertTrue(true === $res);
     $el = '12';
     $res = Each::isInt($el);
     $this->assertTrue(true === $res);
     $el = '12 ';
     $res = Each::isInt($el);
     $this->assertTrue(false === $res);
     /**
      * Проверка ссылок друг на друга.
      * Метод возвращает true, когда две переменные являются ссылками друг на друга.
      */
     $a = 1;
     $b = 1;
     $res = Each::isEqual($a, $b);
     $this->assertTrue(false === $res);
     $a = 1;
     $b = $a;
     $res = Each::isEqual($a, $b);
     $this->assertTrue(false === $res);
     $a = 1;
     $b =& $a;
     $res = Each::isEqual($a, $b);
     $this->assertTrue(true === $res);
     /**
      * Проверяем, количество вызовов и на какой элемент попадаем при определенном количестве вызовов.
      * Для индексного массива количество итераций анонимной функции должно равняться количеству элементов в массиве.
      * Если в индексном массиве находится вложенный индексный массив, то анонимная функция должна вызываться и
      * для каждого индекса вложенного массива.
      * Если методу передан простой элемент или ассоциативный массив, вызов анонимной функции
      * должен произойти только один раз.
      */
     $counter = 0;
     $el = ['oduvanio', 'mail'];
     Each::exec($el, function &() use(&$counter) {
         $r = null;
         $counter++;
         return $r;
     });
     $this->assertTrue(2 === $counter);
     $counter = 0;
     $el = [2, [4, 6], 5];
     Each::exec($el, function ($b) use(&$counter) {
         $counter++;
         if ($counter === 3) {
             $this->assertTrue(6 === $b);
         }
     });
     $this->assertTrue(4 === $counter);
     $counter = 0;
     $el = 1;
     Each::exec($el, function () use(&$counter) {
         $counter++;
     });
     $this->assertTrue(1 === $counter);
     $el = 'test';
     Each::exec($el, function () use(&$counter) {
         $counter++;
     });
     $this->assertTrue(2 === $counter);
     $el = ['name' => 'oduvanio', 'email' => 'mail'];
     Each::exec($el, function () use(&$counter) {
         $counter++;
     });
     $this->assertTrue(3 === $counter);
 }
示例#5
0
文件: arr.php 项目: infrajs/infra
if ($arr !== false) {
    return Ans::err($ans, 'Функция infra_isAssoc вернула неверный массив, задан индексный массив, а она выдает что это ассоциативный');
}
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
// задаем ассоциативный массив
$arr = Each::isAssoc($arr);
if ($arr !== true) {
    return Ans::err($ans, 'Функция infra_isAssoc вернула неверный результат, переданный массив является ассоциативным');
}
$arr = array(1, 2, 3, 4, 5, 6);
// задаем индексный массив
$arr[] = 9;
// добавляем элемент к индексному массиву
$arr[30] = 15;
// при добавлении random-ного индекса массив автоматически становится не индексным, хотя в принципе вроде как он индексный.
$arr = Each::isAssoc($arr);
//if($arr!=false)return Ans::err($ans,'функция infra_isAssoc вернула неверный результат, переданный массив является индексным');
//Проверить, являются ли переданые переменные ссылкой друг на друга
$a = 15;
// создаем переменную a
$b = $a;
// записываем копию переменной a в переменную b
$equal = Each::isEqual($a, $b);
if ($equal !== false) {
    return Ans::err($ans, 'Функция infra_isEqual работает неверно $b не является ссылкой на $a');
}
$b =& $a;
// делаем b ссылкой на a
$equal = Each::isEqual($a, $b);
if ($equal !== true) {
    return Ans::err($ans, 'Функция infra_isEqual работает неверно $b является ссылкой на $a');
示例#6
0
 public static function set($name = '', $value = null)
 {
     //if(Session::get($name)===$value)return; //если сохранена ссылка то изменение её не попадает в базу данных и не синхронизируется
     $right = Sequence::right($name);
     if (is_null($value)) {
         //Удаление свойства
         $last = array_pop($right);
         $val = Session::get($right);
         if ($last && Each::isAssoc($val) === true) {
             //Имеем дело с ассоциативным массивом
             $iselse = false;
             foreach ($val as $i => $valval) {
                 if ($i != $last) {
                     $iselse = true;
                     break;
                 }
             }
             if (!$iselse) {
                 //В объекте ничего больше нет кроме удаляемого свойства... или и его может даже нет
                 //Зачит надо удалить и сам объект
                 return Session::set($right, null);
             } else {
                 array_push($right, $last);
                 //Если есть ещё что-то то работает в обычном режиме
             }
         }
     }
     $li = array('name' => $right, 'value' => $value);
     global $infra_session_data;
     Session::sync($li);
     $infra_session_data = Session::make($li, $infra_session_data);
 }