From: henoheno Date: Sat, 5 May 2007 08:49:10 +0000 (+0900) Subject: array_shrink_leaves() X-Git-Url: http://git.osdn.net/view?p=pukiwiki%2Fpukiwiki_sandbox.git;a=commitdiff_plain;h=93a676b65a27847274b588e8b5cde6fb0cc74649 array_shrink_leaves() --- diff --git a/spam/SpamTest.php b/spam/SpamTest.php index ec3b4e7..c45d74d 100644 --- a/spam/SpamTest.php +++ b/spam/SpamTest.php @@ -1,5 +1,5 @@ assertEquals($result, array_merge_leaves($array1, $array2)); } + function testFunc_array_shrink_leaves() + { + $array = array('key' => array('key')); + $result = array('key'); + $this->assertEquals($result, array_shrink_leaves($array)); + + $array = array('key' => array('key' => array('key' => array('key')))); + $result = array('key'); + $this->assertEquals($result, array_shrink_leaves($array)); + } + function testFunc_uri_pickup() { // 1st argument: Null diff --git a/spam/spam.php b/spam/spam.php index 5493740..7e3d963 100644 --- a/spam/spam.php +++ b/spam/spam.php @@ -1,5 +1,5 @@ \n *array \(#', ' => array (', + var_export($expression, TRUE) + ); + + if ($return) { + return $result; + } else { + echo $result; + return NULL; + } +} + // Remove redundant values from array() function array_unique_recursive($array = array()) { @@ -115,6 +135,16 @@ function strings($binary = '', $min_len = 4, $ignore_space = FALSE) return $binary; } +// Reverse $string with specified delimiter +function delimiter_reverse($string = 'foo.bar.example.com', $from_delim = '.', $to_delim = '.') +{ + if (! is_string($string) || ! is_string($from_delim) || ! is_string($to_delim)) + return $string; + + // com.example.bar.foo + return implode($to_delim, array_reverse(explode($from_delim, $string))); +} + // --------------------- // URI pickup @@ -1356,6 +1386,30 @@ function array_merge_leaves(& $array1, & $array2, $unique_values = TRUE, $renumb return $array; } +// Shrink array('key' => array('key')) to array('key') +function array_shrink_leaves(& $array) +{ + if (! is_array($array)) return $array; + + foreach($array as $key => $value){ + // Recurse. Removing more leaves beforehand + if (is_array($value)) array_shrink_leaves($array[$key]); + } + + $tmp = array(); + foreach($array as $key => $value){ + if (is_array($value)) { + $count = count($value); + if ($count == 1 && current($value) == $key) { + unset($array[$key]); + $array[] = $key; + } + } + } + + return $array; +} + // --------------------- // Reporting @@ -1381,39 +1435,11 @@ function summarize_spam_progress($progress = array(), $blockedonly = FALSE) return implode(', ', $tmp); } -// Very roughly, shrink the lines of var_export() -// NOTE: If the same data exists, it must be corrupted. -function var_export_shrink($expression, $return = FALSE) -{ - $result =preg_replace( - // Remove a newline and spaces - '# => \n *array \(#', ' => array (', - var_export($expression, TRUE) - ); - - if ($return) { - return $result; - } else { - echo $result; - return NULL; - } -} - function summarize_detail_badhost($progress = array()) { if (! isset($progress['is_spam']['badhost'])) return ''; - return var_export_shrink($progress['blocked'], TRUE); -} - -// Reverse $string with specified delimiter -function delimiter_reverse($string = 'foo.bar.example.com', $from_delim = '.', $to_delim = '.') -{ - if (! is_string($string) || ! is_string($from_delim) || ! is_string($to_delim)) - return $string; - - // com.example.bar.foo - return implode($to_delim, array_reverse(explode($from_delim, $string))); + return var_export_shrink(array_shrink_leaves($progress['blocked']), TRUE); } function summarize_detail_newtral($progress = array())