コード例 #1
0
ファイル: gldbmysql.php プロジェクト: shavez00/groceryList
 public function getColumns($table = NULL)
 {
     if ($table === NULL) {
         throw new \Exception("Please input a table name. - glDbMysql.php - line 89");
     }
     if (!in_array($table, $this->getTables())) {
         throw new \Exception("The table you're trying to query does not exist - glDbMysql.php - line 91");
     }
     $dbh = $this->getDbh();
     $stmt = $dbh->prepare("DESCRIBE " . $table);
     $success = $stmt->execute();
     $columnNames = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     $iterator = new \RecursiveArrayIterator($columnNames);
     $fields = array();
     if ($success !== FALSE) {
         while ($iterator->valid()) {
             if ($iterator->hasChildren()) {
                 $childIterator = new \RecursiveArrayIterator($iterator->current());
                 while ($childIterator->valid()) {
                     if ($childIterator->key() == "Field") {
                         array_push($fields, $childIterator->current());
                     }
                     $childIterator->next();
                 }
             }
             $iterator->next();
         }
         return $fields;
     }
     $error = array('query' => "DESCRIBE " . $table, 'errorInfo' => $this->prepareErrorInfo($dbh->errorInfo()));
     $errorInfo = json_encode($error);
     throw new MysqlException($errorInfo);
 }
コード例 #2
0
function traverse(RecursiveArrayIterator $iterator)
{
    while ($iterator->valid()) {
        if ($iterator->hasChildren()) {
            printf("HasChild: %s\n", $iterator->key());
            traverse($iterator->getChildren());
        } else {
            printf("%s => %s\n", $iterator->key(), $iterator->current());
        }
        $iterator->next();
    }
}
コード例 #3
0
ファイル: Arrays.php プロジェクト: myurasov/mym-utils
 /**
  * Walks through array
  * @param $array
  * @param $callback callable function($path, $value)
  */
 public static function walkArray($array, $callback, $iterator = null, $prefix = '')
 {
     if (is_null($iterator)) {
         $iterator = new \RecursiveArrayIterator($array);
     }
     while ($iterator->valid()) {
         if ($iterator->hasChildren()) {
             self::walkArray(null, $callback, $iterator->getChildren(), $prefix . '.' . $iterator->key());
         } else {
             call_user_func($callback, ltrim($prefix . '.' . $iterator->key(), '.'), $iterator->current());
         }
         $iterator->next();
     }
 }
コード例 #4
0
ファイル: CMMIDataHelper.php プロジェクト: pitoukhmer/protalk
 /**
  * @param \RecursiveArrayIterator $iterator
  * @return mixed
  * @throws \Symfony\Component\HttpKernel\Exception\HttpException
  */
 protected function buildResources(\RecursiveArrayIterator $iterator)
 {
     if (count($this->mapping) == 0) {
         throw new HttpException(Codes::HTTP_BAD_REQUEST, 'Unable to generate CMMI Data, no mapping is known');
     }
     $this->resource = new Resource(new Link($this->request->getUri(), 'self'));
     if ($iterator->hasChildren()) {
         while ($iterator->valid()) {
             $childItem = $iterator->current();
             $this->addResource(new \RecursiveArrayIterator($childItem));
             $iterator->next();
         }
     } else {
         $this->addResource($iterator);
     }
     return $this->resource;
 }
コード例 #5
0
ファイル: Uploader.php プロジェクト: xstation1021/kdkitchen
 /**
  * Parse the upload data out of $_FILES.
  *
  * @access protected
  * @return void
  */
 protected function _parseData()
 {
     $data = array();
     // Form uploading
     if ($_FILES) {
         // via CakePHP
         if (isset($_FILES['data'])) {
             foreach ($_FILES['data'] as $key => $file) {
                 $count = count($file);
                 // Add model index if it doesn't exist
                 $iterator = new RecursiveArrayIterator($file);
                 if ($iterator->hasChildren() === false) {
                     $file = array('Fake' => $file);
                 }
                 foreach ($file as $model => $fields) {
                     foreach ($fields as $field => $value) {
                         if ($count > 1) {
                             $data[$model . '.' . $field][$key] = $value;
                         } else {
                             $data[$field][$key] = $value;
                         }
                     }
                 }
             }
             // via normal form or AJAX iframe
         } else {
             $data = $_FILES;
         }
         // AJAX uploading
     } else {
         if (isset($_GET[$this->ajaxField])) {
             $name = $_GET[$this->ajaxField];
             $mime = self::mimeType($name);
             if ($mime) {
                 $input = fopen("php://input", "r");
                 $temp = tmpfile();
                 $data[$this->ajaxField] = array('name' => $name, 'type' => $mime, 'stream' => true, 'tmp_name' => $temp, 'error' => 0, 'size' => stream_copy_to_stream($input, $temp));
                 fclose($input);
             }
         }
     }
     $this->_data = $data;
 }
コード例 #6
0
ファイル: JsonExtractor.php プロジェクト: ywarnier/php-etl
 private function parseJson(\RecursiveArrayIterator $json, array $data, $level)
 {
     foreach ($json as $k => $j) {
         if (!isset($this->path[$level])) {
             return $data;
         }
         if ($k !== $this->path[$level] && $this->path[$level] !== '*') {
             continue;
         }
         if ($k === end($this->path)) {
             if (is_array($j)) {
                 $data = array_merge($data, $j);
             } else {
                 $data[] = $j;
             }
         }
         if ($json->hasChildren()) {
             $data = $this->parseJson($json->getChildren(), $data, $level + 1);
         }
     }
     return $data;
 }
 /**
  * @param RecursiveArrayIterator $iterator
  */
 public function fetchCategoriesWithProducts(RecursiveArrayIterator $iterator)
 {
     while ($iterator->valid()) {
         if ($iterator->hasChildren()) {
             $this->fetchCategoriesWithProducts($iterator->getChildren());
         } else {
             if ($iterator->key() == 'countProducts' && $iterator->current() != '0') {
                 $this->_categoryWithProducts[$iterator->offsetGet('id')] = array('name' => $iterator->offsetGet('name'), 'full_path' => $iterator->offsetGet('full_path'), 'countProduct' => $iterator->offsetGet('countProducts'));
             }
             /*$this->_categoryWithProducts[$iterator->offsetGet('id')] =
               $iterator->offsetGet('countProducts');*/
         }
         $iterator->next();
     }
 }
コード例 #8
0
ファイル: iterator_run.php プロジェクト: jinguanio/david
 public function hasChildren()
 {
     echo 'MyArrIter::hasChildren = ', var_export(parent::hasChildren()), "\n";
     return parent::hasChildren();
 }
コード例 #9
0
ファイル: iterator_047.php プロジェクト: badlamer/hhvm
 function hasChildren()
 {
     echo __METHOD__ . "()\n";
     self::fail(1, __METHOD__);
     return parent::hasChildren();
 }
コード例 #10
0
 function traverse_structure($ids)
 {
     $return_ids = array();
     $iterator = new RecursiveArrayIterator($ids);
     while ($iterator->valid()) {
         if ($iterator->hasChildren()) {
             $return_ids = array_merge($return_ids, $this->traverse_structure($iterator->getChildren()));
         } else {
             if ($iterator->key() == 'int') {
                 $return_ids = array_merge($return_ids, array($iterator->current()));
             }
         }
         $iterator->next();
     }
     return $return_ids;
 }
コード例 #11
0
 /**
  * Walks through input array
  *
  * @param        $array
  * @param        $callback callable function($path, $value)
  * @param null   $iterator
  * @param string $prefix
  */
 private function walkInputArray($array, $callback, $iterator = null, $prefix = '')
 {
     if (!$iterator) {
         $iterator = new \RecursiveArrayIterator($array);
     }
     while ($iterator->valid()) {
         $key = $iterator->key();
         if ($iterator->hasChildren()) {
             $this->walkInputArray(null, $callback, $iterator->getChildren(), $prefix . '.' . $key);
         } else {
             call_user_func($callback, ltrim($prefix . '.' . $key, '.'), $iterator->current());
         }
         $iterator->next();
     }
 }
コード例 #12
0
ファイル: iterator.php プロジェクト: jinguanio/david
<?php

error_reporting(E_ALL);
$it = new RecursiveArrayIterator(array('A', 'B', array('C', 'D'), array(array('E', 'F'), array('G', 'H', 'I'))));
// $it is a RecursiveIterator but also an Iterator,
// so it loops normally over the four elements
// of the array.
echo "Foreach over a RecursiveIterator: \n";
foreach ($it as $value) {
    print_r($value);
    // but RecursiveIterators specify additional
    // methods to explore children nodes
    $children = $it->hasChildren() ? '{Yes}' : '{No}';
    echo $children, ' ';
}
echo "\n";
// we can bridge it to a different contract via
// a RecursiveIteratorIterator, whose cryptic name
// should be read as 'an Iterator that spans over
// a RecursiveIterator'.
echo "Foreach over a RecursiveIteratorIterator: \n";
foreach (new RecursiveIteratorIterator($it) as $value) {
    echo $value;
}
echo "\n";
コード例 #13
0
ファイル: UploadIterator.php プロジェクト: haldayne/customs
 /**
  * Helper to `names`, which recursively traverses the iterator appending
  * new keys onto the base-so-far.
  *
  * @param \RecursiveArrayIterator $it
  * @param string $base
  * @param array $names
  */
 private function reducer(\RecursiveArrayIterator $it, $base, &$names)
 {
     while ($it->valid()) {
         $sub_base = sprintf('%s[%s]', $base, $it->key());
         if ($it->hasChildren()) {
             $this->reducer($it->getChildren(), $sub_base);
         } else {
             $names[] = $sub_base;
         }
         $it->next();
     }
 }
コード例 #14
0
<?php

class Persona
{
    public $nome = 'Mario';
    public $cognome = 'Rossi';
    public $telefono = array('cellulare' => '114499', 'ufficio' => '224433');
    public $socials = array('twitter' => 'rossi', 'facebook' => 'http://www.facebook.com/rossi');
}
$iterator = new RecursiveArrayIterator(new Persona());
foreach ($iterator as $index => $value) {
    if ($iterator->hasChildren()) {
        foreach ($iterator->getChildren() as $key => $child) {
            echo $key . ': ' . $child, PHP_EOL;
        }
    } else {
        echo $index . ': ' . $value, PHP_EOL;
    }
}
コード例 #15
0
ファイル: classFeed.php プロジェクト: rjon76/netspotapp
    public function BuildFeed()
    {
        $xml = '<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>

';
        // build channel title
        for ($iterator = $this->FeedTitle->getIterator(); $iterator->valid(); $iterator->next()) {
            $xml .= '<' . $iterator->key() . '>' . $iterator->current() . '</' . $iterator->key() . '>' . "\n";
            if ('title' == $iterator->key()) {
                $xml .= $this->BuildFeedAtom();
            }
        }
        // build channel items
        $iterator = new RecursiveArrayIterator($this->FeedItems);
        while ($iterator->hasChildren()) {
            $xml .= '<item>' . "\n";
            for ($sub_iterator = $iterator->current()->getIterator(); $sub_iterator->valid(); $sub_iterator->next()) {
                if ('guid' == $sub_iterator->key()) {
                    $xml .= '<' . $sub_iterator->key() . ' isPermaLink ="' . ($sub_iterator->offsetGet('isPermaLink') ? 'true' : 'false') . '">' . $sub_iterator->current() . '</' . $sub_iterator->key() . '>' . "\n";
                } elseif ('isPermaLink' != $sub_iterator->key()) {
                    $xml .= '<' . $sub_iterator->key() . '>' . $sub_iterator->current() . '</' . $sub_iterator->key() . '>' . "\n";
                }
            }
            $xml .= '</item>' . "\n";
            $iterator->next();
        }
        $xml .= '</channel>
</rss>';
        return $xml;
    }
コード例 #16
-1
 protected static function encode_iterator(RecursiveArrayIterator $iterator, $options, $depth)
 {
     $json = array();
     while ($iterator->valid()) {
         $key = $iterator->key();
         $value = $iterator->current();
         if ($value instanceof JSExpression) {
             var_dump($value);
             $json[$key] = $value->json_encode($options);
         } else {
             if ($iterator->hasChildren()) {
                 if (!($depth > 0)) {
                     throw new Exception("Maximum depth reached");
                 }
                 $json[$key] = static::encode_iterator($iterator->getChildren(), $options, $depth - 1);
             } else {
                 $json[$key] = static::encode_value($iterator->current(), $options);
             }
         }
         $iterator->next();
     }
     var_dump($json);
     if (self::is_numeric_array($json)) {
         return '[' . implode(",", $json) . ']';
     } else {
         foreach (array_keys($json) as $key) {
             $json[$key] = static::encode_key($key, $options) . ':' . $json[$key];
         }
         return '{' . implode(",", $json) . '}';
     }
 }