javascript - php嵌套数组的遍历

WBOY
Freigeben: 2016-06-06 20:24:20
Original
1345 Leute haben es durchsucht

问题如下:

<code>现有一个多级嵌套数组,如果用 foreach 遍历,那遍历的也只是数组的一个拷贝,无法修改原始数组的值,除非$array[$key]这样,但是层级多了这样也是不方便的。
</code>
Nach dem Login kopieren
Nach dem Login kopieren

实际情况:

<code>现在用多级数组储存着一些没有规律的数据,因为数据太杂太乱我没有用数据库而是直接采用json文件来存储,比较类似数组。现在要改动数据,很可能就是直接改动数组最底层的数据,我采用的是将查询的键发送到PHP后台,然后foreach遍历找到最终的键值。
</code>
Nach dem Login kopieren
Nach dem Login kopieren

求解:

<code>如果继续用遍历数组的方法来修改,请问有没有什么更好的解决方案。
如果各位对于存储无规律数据有见解,求指教,我也觉得采用json文件来存储数据不太可靠。</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

问题如下:

<code>现有一个多级嵌套数组,如果用 foreach 遍历,那遍历的也只是数组的一个拷贝,无法修改原始数组的值,除非$array[$key]这样,但是层级多了这样也是不方便的。
</code>
Nach dem Login kopieren
Nach dem Login kopieren

实际情况:

<code>现在用多级数组储存着一些没有规律的数据,因为数据太杂太乱我没有用数据库而是直接采用json文件来存储,比较类似数组。现在要改动数据,很可能就是直接改动数组最底层的数据,我采用的是将查询的键发送到PHP后台,然后foreach遍历找到最终的键值。
</code>
Nach dem Login kopieren
Nach dem Login kopieren

求解:

<code>如果继续用遍历数组的方法来修改,请问有没有什么更好的解决方案。
如果各位对于存储无规律数据有见解,求指教,我也觉得采用json文件来存储数据不太可靠。</code>
Nach dem Login kopieren
Nach dem Login kopieren

你的意思是遍历修改值还是什么。贴个代码给你参考参考:

<code>/**
     * 使用点分割形式的键名设置多维数组中的值
     *
     * @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;
    }</code>
Nach dem Login kopieren

使用 dotSet($array, "n.l.m.o", $value) 就能修改 $array['n']['l']['m']['o'] 的值了

居然一进来就看到你了

foreach中可以使用引用

<code>$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);</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!