問題如下:
現有一個多級嵌套數組,如果用 foreach 遍曆,那遍曆的也只是數組的一個拷貝,無法修改原始數組的值,除非$array[$key]這樣,但是層級多了這樣也是不方便的。
實際情況:
現在用多級數組儲存著一些沒有規律的資料,因為資料太雜太亂我沒有用資料庫而是直接採用json檔案來儲存,比較類似數組。現在要改動資料,很可能就是直接改動數組最底層的資料,我採用的是將查詢的鍵發送到PHP後台,然後foreach遍曆找到最終的索引值。
求解:
如果繼續用遍曆數組的方法來修改,請問有沒有什麼更好的解決方案。如果各位對於儲存無規律資料有見解,求指教,我也覺得採用json檔案來儲存資料不太可靠。
回複內容:
問題如下:
現有一個多級嵌套數組,如果用 foreach 遍曆,那遍曆的也只是數組的一個拷貝,無法修改原始數組的值,除非$array[$key]這樣,但是層級多了這樣也是不方便的。
實際情況:
現在用多級數組儲存著一些沒有規律的資料,因為資料太雜太亂我沒有用資料庫而是直接採用json檔案來儲存,比較類似數組。現在要改動資料,很可能就是直接改動數組最底層的資料,我採用的是將查詢的鍵發送到PHP後台,然後foreach遍曆找到最終的索引值。
求解:
如果繼續用遍曆數組的方法來修改,請問有沒有什麼更好的解決方案。如果各位對於儲存無規律資料有見解,求指教,我也覺得採用json檔案來儲存資料不太可靠。
你的意思是遍曆修改值還是什麼。貼個代碼給你參考參考:
/** * 使用點分割形式的鍵名設定多維陣列中的值 * * @param array $array * @param string $key * @param mixed $value * @return array */ public static function dotSet(array & $array, $key, $value) { if (null === $key) { // 如果鍵為null,直接替代數組 return $array = $value; } $keys = explode('.', $key); while (count($keys) > 1) { $key = array_shift($keys); if (!isset($array[$key]) || !is_array($array[$key])) { $array[$key] = []; } $array = & $array[$key]; } $array[array_shift($keys)] = $value; return $array; }
使用 dotSet($array, "n.l.m.o", $value)
就能修改 $array['n']['l']['m']['o']
的值了
居然一進來就看到你了
foreach中可以使用引用
$arr = array(array(1, 2, 3), array(2, 3, 4), array(3, 4, 5));foreach($arr as &$v){ foreach($v as &$vv) { $vv = ++$vv; }}print_r($arr);