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; }
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); } }
$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;
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); }
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');
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); }