abernier
그는 물었다 11년 전
110

등록 정보 추출 배열입니다 객체에는 php 에서 -

39, ve got 배열입니다 i& 고양이 안내선:

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

39 cats& 배열입니다 푸십시오 보고 싶습니다. Id 를 1 선 (일부 아니하고또 함수를 루프).

하지만 나는 내가 생각했던 '을 (를)', '# 39 don& create_function array_walk 사용하여' t know how to do it.

모든 생각은?

abernier
그는 11년 전 댓글을 달았습니다
0

내가 don& # 39, t want to use 루프 싶어서 할당하십시오 1 호선 발생할 수 있다. myfunction cats_id = $ ($ cats). / 복귀해야 어레이입니다 (15 · 18 · 23) /

답변 9 개

['Array_map ()'] 사용할 수 있습니다 (http://php.net/array_map) 함수. 이 그것을 어떻게해야합니다:

$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);

Andreas Klinger
그는 11년 전 댓글을 달았습니다
51

이는 곧 관리자 될 수밖에 없다는 사실을 올바른 솔루션 및 모든, & # 39 d wtf&quot "; d

SilentGhost
그는 11년 전 댓글을 달았습니다
0

또한 비확장성 # 39, ve i& 아무 생각이 왜 이 OP 로렌아줌마가 외곽진입.

abernier
그는 11년 전 댓글을 달았습니다
0

하지만 정확히 내가 찾던 didn& # 39, 어떻게 쓸 수 있을지 알 수 없다! ) 정말 감사합니다 그렉이야

Ionuț G. Stan
그는 11년 전 댓글을 달았습니다
3

내가 싫어하는 유일한 심아이엔큐 이 솔루션에 대한 create_function 을 사용하는 것입니다.

Greg
그는 11년 전 댓글을 달았습니다
4

Php 5.3 람다 함수 가 아니라 많은 사람들이 사용할 수 있습니다

Chris
그는 8년 전 댓글을 달았습니다
0

39; d - I& @silentghost 관심을 알 수 있는 것이 더 확장 가능한 너희는너희가 제안하세요 외곽진입? 우리는 여기서 비슷한 상황이 기존 기능 (저희에게는힘과 can& # 39 로, s, t # 39 수정하십시오 it& 다른 곳에서 유지) 을 반환하는지 어레이입니다. 우리가 원하는 푸십시오 ID 등록 국한됨 다른 영역으로 어레이이며 전달하십시오 다시 다른 (기존) 함수 (또한 can& # 39, t 수정). 이 경우, s # 39 는 Greg& 오토메이티드 수정하십시오?

Ja͢ck
그는 8년 전 댓글을 달았습니다
1

내 생각엔 it& # 39 시간입니다, s 가 폐쇄 오토메이티드 고칠 수 있습니다:)

Relequestual
그는 7년 전 댓글을 달았습니다
24

여깄네요: '$ = array_map project_names (함수 ($ 프로젝트)}, {반품하십시오 project-&gt, 이름, $ $ 프로젝트),' 하지만 알 수 있습니다 (이 블로그 포스트] (http://willem.stuursma.name/2010/11/22/a-detailed-look-into-array_map-and-foreach/) 이 느린 /메모리 집약형에 2.5 배 수 있다는 것입니다.

algorhythm
그는 6년 전 댓글을 달았습니다
7

Everytime i found out, 그 때 '로 만든' 기능이 create_function 메모리는 growing up. 무한 루프 및 프로그람 작성할 경우 '을 (를)' 와 'array_map 호출하십시오 create_function 받을 수 있을 것입니다.' 오류 '언젠가는' 이 항상 메모리 부족. # 39, t '와' 사용 'array_map 그러하매 don& 사용하여 create_function (함수 ($ o) {$ o-&gt 복귀하십시오 id;; }, $ 객체). '

miCRoSCoPiC_eaRthLinG
그는 4년 전 댓글을 달았습니다
0

감사합니다 그렉이야. 완벽하게 작동됨.

Fernando Basso
그는 3년 전 댓글을 달았습니다
1

'이후' 는 사용되지 create_function php 7.2.

, PHP 5.5 이상이 있는 경우 내장 함수를 사용하는 것이 가장 좋은 방법은 'array_column ()'.

$idCats = array_column($cats, 'id');

그러나 아들 또는 어레이에서는 어레이에서는 변환할 수 있다

MikeSchinkel
Ludo - Off the record
그는 4년 전 댓글을 달았습니다
1

단, php 5.5 이상 사용할 수 있는 최선의 해결책이

Toskan
그는 4년 전 댓글을 달았습니다
2

더 이상 할 수 있는 코딩 아니예 5.5 겁니다. 3.5 년 이전 프로그래밍 언어 버전으로.

algorhythm
그는 3년 전 댓글을 달았습니다
8

이 솔루션은 doesn& # 39, t, t ',' 때문에 array_column doesn& 질문에 대답 # 39 의 '의' 한 '어레이입니다 작동합니까 객체에는 전혀. Php 는 이후 7.0.0 이용할 수 있습니다. https://stackoverflow.com/a/23335938/655224

Karol Gasienica
그는 2년 전 댓글을 달았습니다
1

39 의 apc® it& 경우에만 객체에는 속성의 공용 액세스입니다.

이 솔루션을 사용하는 PHP 버전 따라 다릅니다. 적어도 두 가지 솔루션:

1 (새 PHP 버전)

또한 가장 먼저 사용할 수 있다 '는' array_column @JosepAlsina 최단 솔루션이므로 다음과 같이 말했다.

$catIds = array_column($objects, 'id');

  • Notice: '질문을 반복' es '대한' 어레이입니다 redboot용 \stdClass 충족되었으며 에 사용된 것과 함께, PHP 버전 7.0 '=' &gt 가능하다. 하지만 's you 똑같이 할 수 있는' 어레이입니다 사용할 경우, PHP '이후' 어레이입니다 redboot*용 &gt = 5.5 '.

Ss+sp (구 PHP 버전)

Php 버전 @greg tfsnap 수행할 수 있는 것은 다음과 같은 것 "이라고 말했다.

$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);

  • 그러나 PHP 의 최신 버전을 사용하는 것이 좋습니다; = 5.3.0 &gt beware:* '의', '폐쇄 등 그 뒤를 따랐다.

$catIds = array_map(function($o) { return $o->id; }, $objects);

br /&gt <; 차이

새로운 기능 및 it 를 통해 첫 번째 해결책을 tcpg ramcomment. 이미 만들어진 이 쓰레기요 모음기 삭제하지 않습니다, 이미 호출됨 함수은 인스턴스입니다 메모리 부족 몇 가지 이유로. 그리고 그 것을 다시 만든 함수를 호출할 수 없는 것은 상관없이 인스턴스입니다 있기 때문에 우리가 포인터입니다 없는 일이다. 이 코드는 및 다음에 다시 생성될 때, 같은 기능을 한다. 천천히 이 비헤이비어를 칠합니다 메모리에.

두 예제들은 모두 비교해 볼 수 있는 메모리 출력입니다.

잘못된 # #

while (true)
{
    $objects = array_map(create_function('$o', 'return $o->id;'), $objects);

    echo memory_get_usage() . "\n";

    sleep(1);
}

// the output
4235616
4236600
4237560
4238520
...

优秀

while (true)
{
    $objects = array_map(function($o) { return $o->id; }, $objects);

    echo memory_get_usage() . "\n";

    sleep(1);
}

// the output
4235136
4235168
4235168
4235168
...

br /&gt <; 여기 # # 이 논의될 수도 있습니다. https://stackoverflow.com/questions/25808390/memory-leak-is-garbage-collector-doing-right-when-using-create-function-with

algorhythm
Muhammad Omer Aslam
그는 10달 전 댓글을 달았습니다
0

그러나 php 7.2 것 같은데 지금 사용하고 있지만 이 솔루션을 사용하는 경우 클래스 객체 및 되돌려줍니다 습관 작동합니까 이름공간이 공백일 어레이입니다.

algorhythm
그는 10달 전 댓글을 달았습니다
0

악성 코드가 게시물로의 수 있습니까? 짧은 스니핏 컨텍스트로 더 잘 파악할 수 있습니다.

Muhammad Omer Aslam
그는 10달 전 댓글을 달았습니다
0

예를 들어, 이 슬라이드에서는 [스니핏] (https://pastebin.com/pAjYZS3q) 의 위치를 리스트로 정리해놓았어요 반환되었습니다 SDK 와 API 에서 사용하려고 할 때 우리는 '드롭박스 모델 객체에는 array_column 여기있을 어레이입니다 공백일 되돌려줍니다 반면' 항상 [이] (https://pastebin.com/44G6UDvx) 는 둘 다 사용할 수 있는 보호 속성을 제대로 스니핏 두 번째 스니핏 뿐입니다. # 39, 내가 아닌 다른 원인으로 이름공간이 couldn& 찾을 수 없다.

algorhythm
그는 10달 전 댓글을 달았습니다
0

난 '때' 가 아니라 '나는 내 솔루션이므로 쓰기' 객체에는 짓궂군요 '객체에는 개체'. 소문자 '객체' 를 '\stdClass' simple object 설명합니다. 어쩌면 그것이 문제다. '' 방법 '' 객체에는 투명지에 토라리 있습니까? 이. '와' 는 단순한 '한' 어레이입니다 객체에는 거의 동일한. 다음과 같은 불변량 유효한 것이어야 합니다. ' ((객체) (array) $ o) = $ o'. # 39 너회의 클래스 속성, 메서드 you& _get 구현할 때 '' ll make 의 크세스이블 모두에게말이지. 걱정했던것 비헤이비어를 사용할 수 있습니다. 예를 들어, '와' 네 'array&lt Object&gt 반복할 수 있을 뿐만 아니라,' 와 '는' (존재하는 경우) 한 후 또한 토라리 array_map 호츨

Muhammad Omer Aslam
그는 10달 전 댓글을 달았습니다
0

php 와 같은 클래스) 의 두 번째 스니핏 제공한 내 네트워크없음 사용하며, 어쩌면 그 무언가 로케이터로 처음 스니핏 허긴 아마 내아기마저도 변환하여 시도하시겠습니까 迈向 어레이에서는 고맙습니다.

algorhythm
그는 10달 전 댓글을 달았습니다
0

이 때문에 두 번째 스니핏 _get () '와' 매직 '객체' 간단한 방법을 같이 동작합니다.

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

  • it 및 사용 한 선 *:

$ids = extract_ids($cats);

abernier
그는 11년 전 댓글을 달았습니다
1

그러나 나의 질문 내용 감사합니다 실랑고스트 afaq $ res 단 1 명령을 사용하지 않으면 루프지

deceze
그는 11년 전 댓글을 달았습니다
2

무슨 소용이야? 이것은 약 똑바로 얻을 수 있기 때문에 있다. # 39, ll like '뭔가' 를 사용하여 선을 array_walk you& 더 많이 사용하는 것이다.

Charlie Dalsass
그는 2년 전 댓글을 달았습니다
0

단순하고 간결한 @deceze, 우아한, 특히 이 같은 작업을 위한 솔루션 및 - 그래서 그냥 뭔가 더 좋아 보입니다 (예를 들면, 사용자 정의 논리를 isn& # 39 억 t 이 많은 공간을 및 주석). 다는일은, 그 큰 차이다.

쉽게 할 수 있는 우조 자료

$result = array_map(Functions::extract()->id, $arr);

또는 어레이에는 () 의 우조 자료)

$result = Arrays::map($arr, Functions::extract()->id);

체크 아웃: http://ouzo.readthedocs.org/en/latest/utils/functions.html # 푸십시오

함수형 프로그래밍 참조) 와 우조 (잠이) 이 링크).

  • 코드*의

<?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);

?>

  • 출력입니다 *

# 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)
}

하지만, 내가 아는 가장 간단한 방법은 # 39 는 루프를 사용한 it& s do it! 그래도 한 줄에 함수를 사용하여 motor1.1end 백업하도록.

Tom Dyer
그는 4년 전 댓글을 달았습니다
0

난 그냥 # 39, t, t # 39 명이 don& don& 이유에 대해 이렇게 단순한 솔루션 선택하세요. 이렇게 묻는 나여야지 로털 할 것 같습니다.

내장 루프를 훨씬 빠른 것으로 이해할 수 있도록 미리 루프, 실제로 한 후 이를 한 줄 광고문:

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

// $array that contain records and id is what we want to fetch a
$ids = array_column($array, 'id');

    $object = new stdClass();
    $object->id = 1;

    $object2 = new stdClass();
    $object2->id = 2;

    $objects = [
        $object,
        $object2
    ];

    $ids = array_map(function ($object) {
        /** @var YourEntity $object */
        return $object->id;
        // Or even if you have public methods
        // return $object->getId()
    }, $objects);

  • 출력입니다 *: [1, 2]