這可能不是最好的解決方案,但它肯定是a的解決方案。最近,我瞭解到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";
}
DEMO:https://eval.in/57189
你知不知道如何反序列化呢?你知道如何編寫一個循環嗎?你知道如何進行查詢嗎? – Ryan
該JSON如何對應該表?你怎麼知道在每個領域放什麼? –
@RocketHazmat:'children'中的東西被放入與其父對應的'subsite_id'中,並且所有東西都被放入'orderby'中,以依賴它在包含它的數組中的位置。 – Ryan