Reputation:
i have an array like this.
Array
(
[0] => Array
(
[size] => 197602
[files] => Array
(
[0] => directory1
[1] => file1.jpg
)
)
[1] => Array
(
[size] => 274893
[files] => Array
(
[0] => directory1
[1] => file2.jpg
)
)
[2] => Array
(
[size] => 41
[files] => Array
(
[0] => directory2
[1] => file1.txt
)
)
[3] => Array
(
[size] => 41
[files] => Array
(
[0] => directory2
[1] => file2.txt
)
)
[4] => Array
(
[size] => 47
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file1.txt
)
)
[5] => Array
(
[size] => 41
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file2.txt
)
)
[6] => Array
(
[size] => 47
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file3.txt
)
)
[7] => Array
(
[size] => 41
[files] => Array
(
[0] => file1.txt
)
)
[8] => Array
(
[size] => 47
[files] => Array
(
[0] => file2.txt
)
)
)
i used this code snippet.
<?php
foreach($array as $x)
{
$path=implode('\\',$x['path']);
$files[$path]=$x['length'];
}
and got simplified version of above array like this.
Array
(
'directory1\file1.jpg' => 197602,
'directory1\file2.jpg' => 274893,
'directory2\file1.txt' => 41,
'directory2\file2.txt' => 41,
'directory2\sub-directory1\file1.txt' => 47,
'directory2\sub-directory1\file2.txt' => 41,
'directory2\sub-directory1\file3.txt' => 47,
'file1.txt' => 41,
'file2.txt' => 47
);
so my question is how can i get the original array from simplified array, i.e. 1st array from 2nd array. ?
so far i have tried this.
<?php
$array = Array
(
'directory1\file1.jpg' => 197602,
'directory1\file2.jpg' => 274893,
'directory2\file1.txt' => 41,
'directory2\file2.txt' => 41,
'directory2\sub-directory1\file1.txt' => 47,
'directory2\sub-directory1\file2.txt' => 41,
'directory2\sub-directory1\file3.txt' => 47,
'file1.txt' => 41,
'file2.txt' => 47
);
print_r($array);
$new_array = array();
foreach($array as $path => $size){
if(strpos($path,'\\') !== false) {
//file is under a directory tree/structure
$directory_tree = explode('\\',$path);
$new_array[]['size'] = $size ;
$new_array[]['files'] = $directory_tree;
//last element in array is filename.
//print_r($directory_tree );
}else{
//its just file
$new_array[]['size'] = $size;
$new_array[]['path']= $path;
}
}
print_r($new_array);
but getting double arrays for size and files like this.
Array
(
[0] => Array
(
[size] => 197602
)
[1] => Array
(
[files] => Array
(
[0] => directory1
[1] => file1.jpg
)
)
[2] => Array
(
[size] => 274893
)
[3] => Array
(
[files] => Array
(
[0] => directory1
[1] => file2.jpg
)
)
[4] => Array
(
[size] => 41
)
[5] => Array
(
[files] => Array
(
[0] => directory2
[1] => file1.txt
)
)
[6] => Array
(
[size] => 41
)
[7] => Array
(
[files] => Array
(
[0] => directory2
[1] => file2.txt
)
)
[8] => Array
(
[size] => 47
)
[9] => Array
(
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file1.txt
)
)
[10] => Array
(
[size] => 41
)
[11] => Array
(
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file2.txt
)
)
[12] => Array
(
[size] => 47
)
[13] => Array
(
[files] => Array
(
[0] => directory2
[1] => sub-directory1
[2] => file3.txt
)
)
[14] => Array
(
[size] => 41
)
[15] => Array
(
[path] => file1.txt
)
[16] => Array
(
[size] => 47
)
[17] => Array
(
[path] => file2.txt
)
)
How can i solve this issue ?
thanks
Upvotes: 0
Views: 51
Reputation: 7195
You have to change this snippet:
$new_array[]['size'] = $size ;
$new_array[]['files'] = $directory_tree;
to this:
$new_array[] = array('size' => $size, 'files' => $directory_tree);
And similarly for the "just file" case:
$new_array[] = array('size' => $size, 'path' => $path);
Upvotes: 3
Reputation: 10054
Alternatively, you could create a callback:
function parse($arr)
{
return explode('\\', $arr);//process your array
}
Then do it in one line:
$original = array_map('parse', $converted);
Upvotes: 0