nur IDs aus array auslesen

crunch

Mitglied
Hallo Jungs,

ich habe einen $array:

PHP:
stdClass Object
(
    [id] => 11919
    [plz] => 91710
    [ort] => Gunzenhausen
    [distance] => 0.000095
)

stdClass Object
(
    [id] => 13276
    [plz] => 91735
    [ort] => Muhr am See
    [distance] => 5.708963
)

stdClass Object
(
    [id] => 11927
    [plz] => 91728
    [ort] => Gnotzheim
    [distance] => 6.207486
)

Jetzt würde ich gerne alle IDs in einen neuen $array2 schreiben.

Hab leider bisher nur nicht herausgefunden, wie das geht :).

DANKE
 
Hier mal nen kurzes Beispiel:
Code:
<?php
$arr=array(
          json_decode('{"id":123,"foo":11111,"bar":"aaaa"}'),
          json_decode('{"id":456,"foo":22222,"bar":"bbbb"}'),
          json_decode('{"id":789,"foo":33333,"bar":"cccc"}')
          );

function filterID($item)
{
  return $item->id;
}

print_r(array_map("filterID",$arr))
?>

(Vergiss array_filter(), ich meinte array_map() :-))
 
Das würde dann etwa so aussehen

PHP:
//Testdaten erstellen
$a = array(
        (object) array('id' => 11919, 'plz' => 91710),
        (object) array('id' => 13276, 'plz' => 91735)
    );

//Array_map anwenden
$ids = array_map('myMap', $a);    
var_dump($ids);    

//da die Funktion so simpel ist und es sich
//fast nicht lohnt diese extra zu speichern:
$ids = array_map(create_function('$obj', 'return $obj->id;'), $a);    
var_dump($ids);    


function myMap($obj){
    return $obj->id;
}
 
Hallo,
ich bekomme leider dann nur:

array(10)

{ [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL } array(10) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL }

Hier mein Code:

PHP:
echo sizeof($myArray);

//Array_map anwenden
$ids = array_map('myMap', $myArray);    
var_dump($ids);    

//da die Funktion so simpel ist und es sich
//fast nicht lohnt diese extra zu speichern:
$ids = array_map(create_function('$obj', 'return $obj->id;'), $myArray);    
var_dump($ids);    


function myMap($obj){
    return $obj->id;
}

Mit deinem Beispiel-Array funktioniert es. Ist irgendetwas an meinem Array faul?
 
vergleich mal var_dump($a) von mir mit var_dump($myArray) von dir.
Mein Beispiel muss man ggf weiter anpassen
 
hmm.. da scheint bei mir schon etwas faul zu sein:

/* var_dump($a); */

array(2) { [0]=> object(stdClass)(2) { ["id"]=> int(11919) ["plz"]=> int(91710) } [1]=> object(stdClass)(2) { ["id"]=> int(13276) ["plz"]=> int(91735) } }

/* var_dump($myArray); */

array(10) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL }

so fülle ich meinen Array (ist dir, glaube ich, so ähnlich schon einmal in einem anderen Thread begegnet :) ):

PHP:
/* aus der Klasse Stadt */

function getUmkreis() {
	$myArray = array();

          
	$select = 'SELECT plz.id, plz.plz, plz.ort, ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675)) + COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l) - RADIANS(10.7289164659405))) * 6380 AS distance
		FROM plz
		WHERE ACOS(
			SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675))
			+ COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l)
			- RADIANS(10.7289164659405))
			) * 6380 < 10
		ORDER BY distance';

/* Der Select funktioniert einwandfrei */

          $this->DB->query($select);

          $i = 0;

          while($this->DB->next_record()) {

                $myArray[] = $this->DB->f("myArray");

          }

     return $myArray;
	}

/* index.php */

$myOrt = new stadt;

/* $ort = $myOrt->getOrtData(11770); */

$myArray = array();
$myArray = $myStadt->getUmkreis();
echo sizeof($myArray);

//Testdaten erstellen
$a = array(
        (object) array('id' => 11919, 'plz' => 91710),
        (object) array('id' => 13276, 'plz' => 91735)
    );

var_dump($a);

echo "<br><br>";

var_dump($myArray);

echo "<br><br>";

//Array_map anwenden
$ids = array_map('myMap', $myArray);    
var_dump($ids);    

//da die Funktion so simpel ist und es sich
//fast nicht lohnt diese extra zu speichern:
$ids = array_map(create_function('$obj', 'return $obj->id;'), $myArray);    
var_dump($ids);    


function myMap($obj){
    return $obj->id;
}
 
Wie das da nun mit deinen eigenen Query-Auswertungen aussieht kann ich dir nicht sagen.
Aber so wie es aussieht, kommen deine Objekte schon als NULL aus deiner Datenabfrage heraus.
 
SQL-Abfrageergebnis

Host: 127.0.0.1
Datenbank: db102959
Erstellungszeit: 09. März 2010 um 12:18
Erstellt von: phpMyAdmin 2.11.9.6 / MySQL 3.23.58-log
SQL-Befehl: SELECT plz.id, plz.plz, plz.ort, ACOS(SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675)) + COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l) - RADIANS(10.7289164659405))) * 6380 AS distance FROM plz WHERE ACOS( SIN(RADIANS(geo_b)) * SIN(RADIANS(49.1096938300675)) + COS(RADIANS(geo_b)) * COS(RADIANS(49.1096938300675)) * COS(RADIANS(geo_l) - RADIANS(10.7289164659405)) ) * 6380 < 10 ORDER BY distance LIMIT 0, 30 ;
Zeilen: 10
id plz ort distance
11919 91710 Gunzenhausen 0.000095
13276 91735 Muhr am See 5.708963
11927 91728 Gnotzheim 6.207486
11924 91723 Dittenheim 6.807012
11923 91722 Arberg 7.548088
11928 91729 Haundorf 7.728740
11936 91743 Unterschwaningen 8.236960
11935 91741 Theilenhofen 8.692582
11932 91737 Ornbau 9.059513
11933 91738 Pfofeld 9.495128

hab den Query mal getestet. Der müsste stimmen.
 
Zurück