Snippets

Oleksiy Kalinichenko Converting flat string list to hierarchical array

Updated by Oleksiy Kalinichenko

File converting-flat-string-list-to-hierarchical-array.php Added

  • Ignore whitespace
  • Hide word diff
+<?php
+
+include_once __DIR__ . '/includes/common.inc';
+
+function getdatafromfile($file_name) {
+  $csv = array_map('str_getcsv', file($file_name));
+  array_walk($csv, function (&$a) use ($csv) {
+    $a = (object) array_combine($csv[0], $a);
+  });
+  array_shift($csv);
+  return $csv;
+}
+
+$rows = getdatafromfile('acs_census_table_number_lookup1.csv');
+
+// Define maine variables to walk through flat array.
+$indentation = '-';
+$current_indent = 0;
+$previous_indent = 0;
+$tree = array();
+$cursor = &$tree;
+$parents = array();
+
+// Run data row processing of flat array.
+foreach ($rows as $row) {
+  // Detect current indent.
+  $current_indent = substr_count($row->hierarchical_labels, $indentation);
+
+  // Root level.
+  if ($current_indent == 0) {
+    // We should always use `table_id` as key on the root level.
+    $parents = array($row->table_id);
+  }
+  // Level down.
+  elseif ($current_indent > $previous_indent) {
+    $leaf = drupal_array_get_nested_value($tree, $parents);
+    end($leaf);
+    array_push($parents, key($leaf), 'child');
+  }
+  // Level up.
+  elseif ($current_indent < $previous_indent) {
+    $parents = array_slice($parents, 0, -2);
+  }
+  // Same level.
+  elseif ($current_indent == $previous_indent) {
+    // Nop
+  }
+
+  // Get items by cursor.
+  $leaf = drupal_array_get_nested_value($tree, $parents);
+
+  // Add to items a new one by cursor.
+  $leaf[$row->hierarchical_labels] = array(
+    'entity' => $row,
+    'child' => array(),
+  );
+
+  // Update items by cursor.
+  drupal_array_set_nested_value($tree, $parents, $leaf);
+
+  // Update previous indent.
+  $previous_indent = $current_indent;
+}
+
+return;

File snippet.txt Deleted

  • Ignore whitespace
  • Hide word diff
-<?php
-
-include_once __DIR__ . '/includes/common.inc';
-
-function getdatafromfile($file_name) {
-  $csv = array_map('str_getcsv', file($file_name));
-  array_walk($csv, function (&$a) use ($csv) {
-    $a = (object) array_combine($csv[0], $a);
-  });
-  array_shift($csv);
-  return $csv;
-}
-
-$rows = getdatafromfile('acs_census_table_number_lookup1.csv');
-
-// Define maine variables to walk through flat array.
-$indentation = '-';
-$current_indent = 0;
-$previous_indent = 0;
-$tree = array();
-$cursor = &$tree;
-$parents = array();
-
-// Run data row processing of flat array.
-foreach ($rows as $row) {
-  // Detect current indent.
-  $current_indent = substr_count($row->hierarchical_labels, $indentation);
-
-  // Root level.
-  if ($current_indent == 0) {
-    // We should always use `table_id` as key on the root level.
-    $parents = array($row->table_id);
-  }
-  // Level down.
-  elseif ($current_indent > $previous_indent) {
-    $leaf = drupal_array_get_nested_value($tree, $parents);
-    end($leaf);
-    array_push($parents, key($leaf), 'child');
-  }
-  // Level up.
-  elseif ($current_indent < $previous_indent) {
-    $parents = array_slice($parents, 0, -2);
-  }
-  // Same level.
-  elseif ($current_indent == $previous_indent) {
-    // Nop
-  }
-
-  // Get items by cursor.
-  $leaf = drupal_array_get_nested_value($tree, $parents);
-
-  // Add to items a new one by cursor.
-  $leaf[$row->hierarchical_labels] = array(
-    'entity' => $row,
-    'child' => array(),
-  );
-
-  // Update items by cursor.
-  drupal_array_set_nested_value($tree, $parents, $leaf);
-
-  // Update previous indent.
-  $previous_indent = $current_indent;
-}
-
-return;
Created by Oleksiy Kalinichenko

File snippet.txt Added

  • Ignore whitespace
  • Hide word diff
+<?php
+
+include_once __DIR__ . '/includes/common.inc';
+
+function getdatafromfile($file_name) {
+  $csv = array_map('str_getcsv', file($file_name));
+  array_walk($csv, function (&$a) use ($csv) {
+    $a = (object) array_combine($csv[0], $a);
+  });
+  array_shift($csv);
+  return $csv;
+}
+
+$rows = getdatafromfile('acs_census_table_number_lookup1.csv');
+
+// Define maine variables to walk through flat array.
+$indentation = '-';
+$current_indent = 0;
+$previous_indent = 0;
+$tree = array();
+$cursor = &$tree;
+$parents = array();
+
+// Run data row processing of flat array.
+foreach ($rows as $row) {
+  // Detect current indent.
+  $current_indent = substr_count($row->hierarchical_labels, $indentation);
+
+  // Root level.
+  if ($current_indent == 0) {
+    // We should always use `table_id` as key on the root level.
+    $parents = array($row->table_id);
+  }
+  // Level down.
+  elseif ($current_indent > $previous_indent) {
+    $leaf = drupal_array_get_nested_value($tree, $parents);
+    end($leaf);
+    array_push($parents, key($leaf), 'child');
+  }
+  // Level up.
+  elseif ($current_indent < $previous_indent) {
+    $parents = array_slice($parents, 0, -2);
+  }
+  // Same level.
+  elseif ($current_indent == $previous_indent) {
+    // Nop
+  }
+
+  // Get items by cursor.
+  $leaf = drupal_array_get_nested_value($tree, $parents);
+
+  // Add to items a new one by cursor.
+  $leaf[$row->hierarchical_labels] = array(
+    'entity' => $row,
+    'child' => array(),
+  );
+
+  // Update items by cursor.
+  drupal_array_set_nested_value($tree, $parents, $leaf);
+
+  // Update previous indent.
+  $previous_indent = $current_indent;
+}
+
+return;
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.