Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica Array php
Forum PHP.pl > Forum > Przedszkole
mario99228
Witam, mam taką tablice.

  1. Array ([0] => 3893398399 [1] => 3871644589 [2] => 3863500376)


a potrzebuje żeby wyglądała tak.

  1. Array (3893198399, 3871644189, 3863500376)


Jak to zrobić ? i czy się da? niestety dla APIAllegro jest różnica miedzy jednym a drugim.
tomxx
Nie da się, bo indeksy (0, 1, 2...) są dodawane przez PHP automatycznie (jeśli samemu się ich nie poda).
Kshyhoo
serialize

Ew.:
  1. $t[0] = 3893398399;
  2. $t[1] = 3871644589;
  3. $t[2] = 3863500376;
  4.  
  5. $tekst = implode(", ", $t);
  6.  
  7. echo $tekst;
Crozin
Nie ma znaczenia jak to zapiszesz, obie tablice będą identyczne (pomijam tutaj fakt, że w podanym przez Ciebie przykładzie znajdują się różne wartości).
mario99228
Chce pobrać dane kupujących z allegro za pomocą API i metody GetPostBuyData();
parametr jaki przyjmuje to tablica Array z id z aukcji.

  1.  
  2. $tab = Array ( [0] => 3893198399 [1] => 3871644189 [2] => 3863500376 )
  3.  
  4. $allegro->objectToArray($allegro->GetPostBuyData($tab));
  5.  
  6. //zwraca pusta tablice.
  7.  
  8. $tab2 = Array (3893198399, 3871644189, 3863500376 );
  9.  
  10. $allegro->objectToArray($allegro->GetPostBuyData($tab2));
  11.  
  12. //zwraca poprawne dane
  13.  
  14.  


Dlaczego tak się dzieje?
phpion
Wklej kod, jakiego używasz bo to co podałeś na pewno jest nieprawidłowe. Swoją drogą: skoro wiesz, która wersja działa to po co drążysz temat tej, która nie działa?
-mario99228-
Mam taki kod.

  1. try{
  2. $allegro = new AllegroWebAPI();
  3. $allegro->Login();
  4. $sold = $allegro->objectToArray($allegro->MyAccount2(
  5. array('account-type' => 'sold',
  6. 'offset' => '0',
  7. 'items-array' => array(),
  8. 'limit' => 25))
  9. );
  10. }catch(SoapFault $sold){echo 'Erorr code';}
  11.  
  12. $tab = array();
  13. foreach($sold as $id){
  14.  
  15. $tab[] = $id['my-account-array'][0];
  16. }
  17.  
  18. $data = $allegro->objectToArray($allegro->GetPostBuyData($tab));
  19.  
  20.  
  21. print_r('<pre>');
  22. print_r($data);
  23. print_r('</pre>');
  24.  
nospor
Zapisy
$tab = Array ( [0] => 3893198399 [1] => 3871644189 [2] => 3863500376 )
$tab2 = Array (3893198399, 3871644189, 3863500376 );

Dają jednakowy efekt. Problem moze lezec w czyms innym, np. bialych znakach

Zamiast
print_r('<pre>');

print_r($data);

print_r('</pre>');


Daj
print_r('<pre>');

var_dump($data);

print_r('</pre>');

I pokaz dokladnie co zwraca

mario99228
$data zwraca puste tablice, $tab zwraca nr aukcji.

  1.  
  2.  
  3. //var_dump($data);
  4.  
  5. array(3) {
  6. [0]=>
  7. array(2) {
  8. ["item-id"]=>
  9. int(2147483647)
  10. ["users-post-buy-data"]=>
  11. array(0) {
  12. }
  13. }
  14. [1]=>
  15. array(2) {
  16. ["item-id"]=>
  17. int(2147483647)
  18. ["users-post-buy-data"]=>
  19. array(0) {
  20. }
  21. }
  22. [2]=>
  23. array(2) {
  24. ["item-id"]=>
  25. int(2147483647)
  26. ["users-post-buy-data"]=>
  27. array(0) {
  28. }
  29. }
  30. }
  31.  
  32.  
  33. //var_dump($tab);
  34. array(3) {
  35. [0]=>
  36. string(10) "3893198349"
  37. [1]=>
  38. string(10) "3871644149"
  39. [2]=>
  40. string(10) "3863500346"
  41. }
  42.  
  43.  
  44.  
Greg0
takie zdefiniowanie tablicy
  1. $tab = Array ( [0] => 3893198399 [1] => 3871644189 [2] => 3863500376 )

to raczej jest nieprawidłowe (coś takiego wyrzuca print_r). Chyba że się mylę to wyprowadźcie mnie z błędu.
nospor
Tak, chodzilo mi o $tab

Sprobuj zrzutowac to na INT

$tab[] = (int)$id['my-account-array'][0];
mario99228
Zwraca.


  1. array(3) {
  2. [0]=>
  3. int(2147483647)
  4. [1]=>
  5. int(2147483647)
  6. [2]=>
  7. int(2147483647)
  8. }
  9.  

$data puste. Jeśli tablice z nr aukcji zdefiniuje w ten sposób

  1. $allegro = new AllegroWebAPI();
  2. $allegro->Login();
  3. $sold = $allegro->objectToArray($allegro->MyAccount2(
  4. array('account-type' => 'sold',
  5. 'offset' => '0',
  6. 'items-array' => array(),
  7. 'limit' => 25))
  8. );
  9. }catch(SoapFault $sold){echo 'Erorr code';}
  10.  
  11. /*
  12.   $tab = array();
  13.   foreach($sold as $id){
  14.   $tab[] = (int)$id['my-account-array'][0];
  15.   //$tab[] = $id['my-account-array'][0];
  16.   }
  17.  
  18.   */
  19. $tab = Array(3893198399, 3871644189, 3863500376);
  20. $data = $allegro->objectToArray($allegro->GetPostBuyData($tab));
  21.  
  22.  
  23. print_r('<pre>');
  24. var_dump($data);
  25. print_r('</pre>');
  26.  


Zwraca dane dla 3 aukcji.
nospor
puste, bo przekroczylo zasieg INT 2147483647

NO ale cos mi tu nie pasuje. ustawiasz recznie takie dane:

$tab = Array(3893198399, 3871644189, 3863500376);



Podczas gdy var_dump zwracal ci wyraznie inne:
3893198349, 3871644149, 3863500346

3893198399, 3871644189, 3863500376
3893198349, 3871644149, 3863500346

To sa zupelnie rozne dane. Ustaw recznie te dane, ktore zwraca ci var_dump i dopiero potem wyciagaj wnioski. A Ty ustawiasz inne dane, to nic dziwnego ze dla jednych dziala a dla innych nie
mario99228
Poniżej oryginalne dane które są zwracane.

  1. //var_dump($tab) zwraca
  2.  
  3. array(3) {
  4. [0]=>
  5. string(10) "3893198399"
  6. [1]=>
  7. string(10) "3871644189"
  8. [2]=>
  9. string(10) "3863500376"
  10. }
  11.  
  12. $data = $allegro->objectToArray($allegro->GetPostBuyData($tab));
  13.  
  14. //var_dump($data) zwraca
  15.  
  16. array(3) {
  17. [0]=>
  18. array(2) {
  19. ["item-id"]=>
  20. int(2147483647)
  21. ["users-post-buy-data"]=>
  22. array(0) {
  23. }
  24. }
  25. [1]=>
  26. array(2) {
  27. ["item-id"]=>
  28. int(2147483647)
  29. ["users-post-buy-data"]=>
  30. array(0) {
  31. }
  32. }
  33. [2]=>
  34. array(2) {
  35. ["item-id"]=>
  36. int(2147483647)
  37. ["users-post-buy-data"]=>
  38. array(0) {
  39. }
  40. }
  41. }
  42.  
  43. // Przykład działający.
  44.  
  45. $tab = array(3893198399, 3871644189, 3863500376);
  46. $data = $allegro->objectToArray($allegro->GetPostBuyData($tab));
  47. var_dump($data) //zwraca pełne tablice
  48.  
  49.  

Niepotrzebnie zmieniłem oryginalne dane, faktycznie mogło to wprowadzić niepotrzebny zamęt.
nospor
OK.

Wydaje mi sie, ze problem moze byc gdzies tam w funkcji $allegro->objectToArray lub podobnych.
Twoje $tab zawiera liczby ale jako tekst. Rzutowanie tego na INT jak widac przekracza zasieg i dostaje sie zle liczby. Pewnie funkcje gdzies w srodku, jesli widza ze dana wartosc to tekst, to probuja wlasnie rzutowac to na INT i dochodzi do przeklamania danych
phpion
Przerabiałem kiedyś podobny temat. Musisz do Allegro dostarczyć liczby, nie tekst. Czyli każdy ID aukcji musi być liczbą. Nie możesz jednak rzutować na inta bo przekraczasz zakres, musisz rzutować na float. Czyli albo (float)$id albo floatval($id) albo przelecieć całą tablicę z id poprzez array_map('floatval', $array). Powinno pomóc.
nospor
Tez chcialem zaproponowac (float) ale uznalem, ze allegro tego nie lyknie. Ale pewnie masz racje, tym bardziej ze to przerabiales wink.gif
phpion
Łyknie smile.gif stringów nie łyka.
mario99228
Łyknęło, dzięki !

Działający kod.

  1. try{
  2. $allegro = new AllegroWebAPI();
  3. $allegro->Login();
  4. $sold = $allegro->objectToArray($allegro->MyAccount2(
  5. array('account-type' => 'sold',
  6. 'offset' => '0',
  7. 'items-array' => array(),
  8. 'limit' => 25))
  9. );
  10. }catch(SoapFault $sold){echo 'Erorr code';}
  11.  
  12. $tab = array();
  13. foreach($sold as $id){
  14. $tab[] = (float)$id['my-account-array'][0];
  15. }
  16.  
  17. $data = $allegro->objectToArray($allegro->GetPostBuyData($tab));
  18.  
  19. print_r('<pre>');
  20. var_dump($data);
  21. print_r('</pre>');
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.