php - Array not filling out like I'm expecting it to -
i have function that's supposed take in array of arrays, , split array of arrays of 100 items each. problem when execute it, in case, passing 1137 items, return array, has 12 arrays, empty except last one.
here's code:
$names_to_fetch_from_twitter = array ( array('screen_name' => 'acme', 'profiles_rownum' => 1, 'screen_name_rownum' => 1), array('screen_name' => 'acme1', 'profiles_rownum' => 2, 'screen_name_rownum' => 2), array('screen_name' => 'acme2', 'profiles_rownum' => 3, 'screen_name_rownum' => 3), array('screen_name' => 'acme3', 'profiles_rownum' => 4, 'screen_name_rownum' => 4), array('screen_name' => 'acme4', 'profiles_rownum' => 5, 'screen_name_rownum' => 5) ); $names_to_fetch_from_twitter_organized = split_into_blokcs_of_3 ($names_to_fetch_from_twitter); echo '<pre>'; print_r($names_to_fetch_from_twitter_organized); echo '</pre>'; function split_into_blokcs_of_3 ($names_to_fetch_from_twitter) { $names_to_fetch_from_twitter_organized = array(); $count = 1; $screen_names = array(); $profiles_row_nums = array(); $screen_name_rownums = array(); foreach ($names_to_fetch_from_twitter $name_to_fetch_from_twitter) { $screen_names[] = $name_to_fetch_from_twitter['screen_name']; $profiles_row_nums[] = $name_to_fetch_from_twitter['profiles_rownum']; $screen_name_rownums[] = $name_to_fetch_from_twitter['screen_name_rownum']; $count++; if ($count > 3) { $count = 1; $screen_names = array(); $profiles_row_nums = array(); $screen_name_rownums = array(); $names_to_fetch_from_twitter_organized[] = package_into_array($screen_names,$profiles_row_nums,$screen_name_rownums,$names_to_fetch_from_twitter_organized); } } if ($count > 1) { $names_to_fetch_from_twitter_organized[] = package_into_array($screen_names,$profiles_row_nums,$screen_name_rownums,$names_to_fetch_from_twitter_organized); } return $names_to_fetch_from_twitter_organized; } function package_into_array($screen_names,$profiles_row_nums,$screen_name_rownums,$names_to_fetch_from_twitter_organized) { $names_to_fetch_from_twitter_organized[] = array ( 'screen_names' => implode (',',$screen_names), 'profiles_row_nums' => $profiles_row_nums, 'screen_name_rownums' => $screen_name_rownums ); return $names_to_fetch_from_twitter_organized; }
here's output:
array ( [0] => array ( [0] => array ( [screen_names] => [profiles_row_nums] => array ( ) [screen_name_rownums] => array ( ) ) ) [1] => array ( [0] => array ( [0] => array ( [screen_names] => [profiles_row_nums] => array ( ) [screen_name_rownums] => array ( ) ) ) [1] => array ( [screen_names] => acme3,acme4 [profiles_row_nums] => array ( [0] => 4 [1] => 5 ) [screen_name_rownums] => array ( [0] => 4 [1] => 5 ) ) ) )
when i'm expecting following:
array ( [0] => array ( [screen_names] => acme1,acme2,acme3 [profiles_row_nums] => array ( [0] => 1 [1] => 2 [2] => 3 ) [screen_name_rownums] => array ( [0] => 1 [1] => 2 [2] => 3 ) ) [1] => array ( [screen_names] => acme4,acme5 [profiles_row_nums] => array ( [0] => 1 [1] => 2 ) [screen_name_rownums] => array ( [0] => 1 [1] => 2 ) ) )
any ideas?
solution:
i had couple of errors:
- i resetting arrays before included them in master array
- i incrementing array both in main function , helper function.
here's correct code:
function split_into_blokcs_of_3 ($names_to_fetch_from_twitter) { $names_to_fetch_from_twitter_organized = array(); $count = 1; $screen_names = array(); $profiles_row_nums = array(); $screen_name_rownums = array(); foreach ($names_to_fetch_from_twitter $name_to_fetch_from_twitter) { $screen_names[] = $name_to_fetch_from_twitter['screen_name']; $profiles_row_nums[] = $name_to_fetch_from_twitter['profiles_rownum']; $screen_name_rownums[] = $name_to_fetch_from_twitter['screen_name_rownum']; $count++; if ($count > 3) { $names_to_fetch_from_twitter_organized = package_into_array($screen_names,$profiles_row_nums,$screen_name_rownums,$names_to_fetch_from_twitter_organized); $count = 1; $screen_names = array(); $profiles_row_nums = array(); $screen_name_rownums = array(); } } if ($count > 1) { $names_to_fetch_from_twitter_organized = package_into_array($screen_names,$profiles_row_nums,$screen_name_rownums,$names_to_fetch_from_twitter_organized); } return $names_to_fetch_from_twitter_organized; }
i think might assuming new array created inside of if($count > 3) block.
you might try adding new array() there instead of array should overwrite there previously.
Comments
Post a Comment