这是javascript序列化数组:
[{"id":1},{"id":2},{"id":3,"children":[{"id":4,"children":[{"id":5},{"id":6},{"id":7}]},{"id":8}]}]
如何使用php将此(动态)保存到mysql:
***********************************
| id | subsite_id | orderby |
1 0 0
2 0 1
3 0 2
4 3 0
5 4 0
6 4 1
7 4 2
8 3 1
***********************************
感谢您的回答。
答案 0 :(得分:1)
这可能不是最佳解决方案,但肯定是 解决方案。最近,我了解了RecursiveIterator
和他们的堂兄RecursiveIteratorIterator
。所以,我自己在我编码的所有内容中使用它们(相关的XKCD:https://xkcd.com/208/)。
我很快就把它搞砸了:
class ChildIDIterator implements RecursiveIterator{
private $_array;
private $_position = 0;
private $_parent;
public function __construct(array $array, $parent=0) {
$this->_array = $array;
$this->_parent = $parent;
}
function valid(){
return isset($this->_array[$this->_position]);
}
function current() {
return $this->_array[$this->_position]['id'];
}
function next() {
$this->_position++;
}
function rewind() {
$this->_position = 0;
}
function key() {
return $this->_position;
}
function hasChildren(){
return isset($this->_array[$this->_position]['children']);
}
function getChildren(){
return new self(
$this->_array[$this->_position]['children'],
$this->_array[$this->_position]['id']
);
}
function getParent(){
return $this->_parent;
}
}
这会递归遍历您的(已解码)数组并返回id值。要使用它,您可以这样做:
$json = '[{"id":1},{"id":2},{"id":3,"children":[{"id":4,"children":[{"id":5},{"id":6},{"id":7}]},{"id":8}]}]';
$array = json_decode($json, TRUE);
$iterate = new RecursiveIteratorIterator(new ChildIDIterator($array), RecursiveIteratorIterator::SELF_FIRST);
foreach($iterate as $order=>$id){
echo "UPDATE sites SET subsite_id={$iterate->getParent()}, orderby={$order} WHERE id={$id};\n";
}