Page 1 of 1

[SOLVED] pbm with array_unique

Posted: Mon Aug 02, 2004 10:27 am
by rcmn
i want use array_unique but something is missing; the duplicates are still there.

Code: Select all

<?
$handle = fopen("wdt_list1.csv", "r");
while (!feof($handle)) &#123;
   $node_id = fscanf($handle, "%&#1111;W0-9]   %&#1111;A-Za-z]\r\n"); //*find node id

            if ($node_id) &#123;
     list ($serv_id) = $node_id;
                $serv_id =  substr($serv_id, 2, -2); &#123;    //*format to xxxx serv. format

                $serv_tab = array($serv_id); //*creat tab
            $serv_unk = array_unique ($serv_tab); //* del duplicate

         print_r ($serv_unk);
   &#125;
   &#125;
   $serv_id=NULL;
&#125;
fclose($handle);


?>

i tried

Code: Select all

$serv_unk = array_unique ($serv_tab); //* del duplicate

         print_r ($serv_unk);
after

Code: Select all

fclose($handle);
but it gave me the last value of the array...

Posted: Mon Aug 02, 2004 10:54 am
by Weirdan
can you show us the contents of wdt_list1.csv?

$serv_tab has only one element on each iteration, no wonder it remains the same after array_unique...
perhaps you want to gather all $serv_id's and than run array_unique on that collection, do you?

Posted: Mon Aug 02, 2004 1:42 pm
by rcmn
the out put of that page :

Code: Select all

<?
$handle = fopen("wdt_list1.csv", "r");
while (!feof($handle)) &#123;
   $node_id = fscanf($handle, "%&#1111;W0-9]	%&#1111;A-Za-z]\r\n"); //*find node id

            if ($node_id) &#123;
     list ($serv_id) = $node_id;
   $serv_id =  substr($serv_id, 2, -2); &#123;    //*format to xxxx serv. format
            if (trim($serv_id) != "")      //*supp space

                     echo "".$serv_id."<br>";
	&#125;
   &#125;
   $serv_id=NULL;
&#125;
fclose($handle);
?>

is that
9441
9441
9441
9441
9441
9441
9441
9431
9421
9421
9421
9421
9421
9421
9421
9411
9411
9322
8671
8661
8351
8301
8301
8281
7951
7571
7211
7101
7101
7091
6892
6892
6871
6662
6311
6252
5871
5871
5871
5871
5861
5831
5831
5641
5441
5363
5362
5362
5356
5344
5342
5335
5334
5328
5307
5306
4871
4821
4741
4741
4741
4731
4681
4425
4425
4425
4425
4414
4414
4414
4414
4414
4414
4414
4414
4414
4414
4414
4414
4411
4411
4362
4362
4362
4350
4350
4350

4317
etc........and more

Posted: Mon Aug 02, 2004 2:00 pm
by Weirdan
hmm.... maybe something like this:

Code: Select all

$handle = fopen("wdt_list1.csv", "r"); 
while (!feof($handle)) { 
   $node_id = fscanf($handle, "%[W0-9]   %[A-Za-z]\r\n"); //*find node id 
   if ($node_id) { 
     list ($serv_id) = $node_id; 
     $serv_id =  substr($serv_id, 2, -2);    //*format to xxxx serv. format 
     $serv_tab[] = array($serv_id); //*creat tab 
   } 
   $serv_id=NULL; 
} 
fclose($handle); 

$serv_unk = array_unique ($serv_tab); //* del duplicate 
print_r ($serv_unk);

Posted: Mon Aug 02, 2004 3:26 pm
by rcmn
i get

Code: Select all

Array ( &#1111;0] => Array ( &#1111;0] => ) )

Posted: Tue Aug 03, 2004 12:25 pm
by rcmn
i solved it ,replacing $serv_tab[] = array($serv_id) by $serv_tab[] = $serv_id