PHP - nesnelerin bir diziden bir özellik ayıklanıyor

3 Cevap

Ben kedi nesneleri bir dizi var:

$cats = Array
    (
        [0] => stdClass Object
            (
                [id] => 15
            ),
        [1] => stdClass Object
            (
                [id] => 18
            ),
        [2] => stdClass Object
            (
                [id] => 23
            )
)

ve ben 1 hat (bir fonksiyon ne de bir döngü) içinde kedilerin kimlikleri bir dizi ayıklamak istiyorum.

I create_function ile array_walk kullanılarak düşünüyordum ama ben bunu nasıl bilmiyorum.

Herhangi bir fikir?

3 Cevap

function extract_ids($cats){
    $res = array();
    foreach($cats as $k=>$v) {
        $res[]= $v->id;
    }
    return $res
}

ve kullanmak in one line:

$ids = extract_ids($cats);

PHP Yerleşik döngüler hızlı sonra döngüler yorumlanır, bu yüzden aslında bu bir one-liner olmak için mantıklı:

$result = array();
array_walk($cats, create_function('$value, $key, &$result', '$result[] = $value->id;'), $result)

CODE

<?php

# setup test array.
$cats = array();
$cats[] = (object) array('id' => 15);
$cats[] = (object) array('id' => 18);
$cats[] = (object) array('id' => 23);

function extract_ids($array = array())
{
    $ids = array();
    foreach ($array as $object) {
        $ids[] = $object->id;
    }
    return $ids;
}

$cat_ids = extract_ids($cats);
var_dump($cats);
var_dump($cat_ids);

?>

OUTPUT

# var_dump($cats);
array(3) {
  [0]=>
  object(stdClass)#1 (1) {
    ["id"]=>
    int(15)
  }
  [1]=>
  object(stdClass)#2 (1) {
    ["id"]=>
    int(18)
  }
  [2]=>
  object(stdClass)#3 (1) {
    ["id"]=>
    int(23)
  }
}

# var_dump($cat_ids);
array(3) {
  [0]=>
  int(15)
  [1]=>
  int(18)
  [2]=>
  int(23)
}

Ben onun bir döngü kullanarak biliyorum, ama bunu yapmak için basit yolu! Ve hala tek bir hat üzerinde biter bir işlevi kullanarak.