$v) { if (!array_key_exists($section, $dst)) { $removed_sections[$section] = $v; continue; } foreach ($v as $key=>$value) { if (!array_key_exists($key, $dst[$section])) { $removed_keys[$section . '/' . $key] = $value; continue; } } } foreach ($dst as $section=>$v) { if (!array_key_exists($section, $src)) { $added_sections[$section] = $v; continue; } foreach ($v as $key=>$value) { if (!array_key_exists($key, $src[$section])) { $added_keys[$section . '/' . $key] = $value; continue; } } } header('Content-Type: text/plain'); echo "Removed sections :\n"; print_r($removed_sections); echo "Removed keys :\n"; print_r($removed_keys); echo "Added sections :\n"; print_r($added_sections); echo "Added keys :\n"; print_r($added_keys); function parse_ini_2($file, $parse_sections = true) { $file = file($file); $ini = array(); $current_section = false; $i = 0; foreach ($file as $line) { $i++; $line = trim($line); if (preg_match('!^[;#]!', $line) || empty($line)) continue; if (preg_match('!^\[([^\]]+)\]!', $line, $match)) { if ($parse_sections) { $current_section = trim($match[1]); $ini[$current_section] = array(); } continue; } if (preg_match('!^([^=]+)\s*=\s*(.*)$!', $line, $match)) { $key = trim($match[1]); $value = trim($match[2]); if (preg_match('!^"([^"]*)"!', $value, $match)) $value = (string) $match[1]; elseif (preg_match("!^'([^']*)'!", $value, $match)) $value = (string) $match[1]; else { $value = preg_replace('![;#].*$!', '', $value); $value = trim($value); if (is_numeric($value)) $value = (int) $value; elseif (strtolower($value) == 'true') $value = true; elseif (strtolower($value) == 'false') $value = false; else $value = (string) $value; } if (!$current_section) { $ini[$key] = $value; } else { $ini[$current_section][$key] = $value; } } else { die("Parse error on line $i: ".$line); } } return $ini; } ?>