PHP. 객체 배열과 함께 array_column을 사용할 수 있습니까?
array_column
객체 배열 을 전달할 수 있습니까?
ArrayAccess 인터페이스를 구현했지만 효과가 없습니다.
다른 것을 구현해야합니까?
class Foo implements ArrayAccess {
public $Id, $Title;
public function offsetExists($offset)
{
return isset($this->{$offset});
}
public function offsetGet($offset)
{
return $this->{$offset};
}
public function offsetSet($offset, $value)
{
$this->{$offset} = $value;
}
public function offsetUnset($offset)
{
unset($this->{$offset});
}
}
$object = new \Foo();
$object->Id = 1;
$object->Title = 'Test';
$records = array(
$object,
array(
'Id' => 2,
'Title' => 'John'
)
);
var_dump(array_column($records, 'Title')); // array (size=1) 0 => string 'John' (length=4)
PHP 5
array_column
개체 배열과 함께 작동하지 않습니다. 사용 array_map
하는 대신 :
$titles = array_map(function($e) {
return is_object($e) ? $e->Title : $e['Title'];
}, $records);
PHP 7
array_column()
이 함수는 이제 2 차원 배열뿐만 아니라 객체 배열을 지원합니다. 공용 속성 만 고려
__get()
되며 동적 속성 을 사용하는 개체 도__isset()
.
참조 https://github.com/php/php-src/blob/PHP-7.0.0/UPGRADING#L629을 - 감사에 벨 힌트를 위해!
array_column에 객체 배열을 전달할 수 있습니까?
PHP 7
예, http://php.net/manual/en/function.array-column.php를 참조 하십시오.
PHP 5> = 5.5.0
PHP 5 array_column
에서는 객체 배열이 작동하지 않습니다. 다음과 같이 시도 할 수 있습니다.
// object 1
$a = new stdClass();
$a->my_string = 'ciao';
$a->my_number = 10;
// object 2
$b = new stdClass();
$b->my_string = 'ciao b';
$b->my_number = 100;
// array of objects
$arr_o = array($a,$b);
// using array_column with an array of objects
$result = array_column(array_map(function($o){return (array)$o;},$arr_o),'my_string');
추신 : 명확성 array_column
을 위해 익명 함수와 함께 array_map을 사용 하지 않는 것을 선호 합니다.
$result = array_map(function($o){ return $o->my_string; }, $arr_o);
또는 간단한 foreach
$result = array();
foreach($arr_o as $o) {
$result[] = $o->my_string;
}
다음은 php7과 php5 모두에서 작동하는 함수입니다.
function array_column_portable($array, $key) {
return array_map(function($e) use ($key) {
return is_object($e) ? $e->$key : $e[$key];
}, $array);
}
그런 다음 php7 에서 array_column 을 사용할 때 사용할 수 있습니다.
가능한 해결책은 다음과 같은 객체 배열을 준비하는 것입니다.
$objectsList = [];
foreach ($objs as $obj) {
$objectsList[] = (array)$obj;
}
$propList = array_column($objectsList, 'prop');
array_column
자식 개체에서 사용할 수는 없지만 배열로 캐스팅 할 수 있습니다. 물론 이것은 갈 길은 아니지만 길입니다.
사용array_map/get_object_vars
(포함 배열로 인해 귀하의 경우에는 작동하지 않음)
array_column(array_map('get_object_vars', $thingy), 'property');
사용 json_decode/json_encode
array_column(json_decode(json_encode($thingy), true), 'property');
Note: Using json brings not the same result as using a true recursive function. You’ll lose protected and private properties of the object. But in some situations its fine.
function object_to_array($object) {
if (is_object($object)) $object = get_object_vars($object);
return is_array($object) ? array_map(__FUNCTION__, $object) : $object;
}
For future Visitor.
$arrayColumnData = array_map(function($e) {
return is_object($e) ? $e->your_column : $e['your_column'];
}, $yourArray);
Thanks.
ReferenceURL : https://stackoverflow.com/questions/23335845/php-is-it-possible-to-use-array-column-with-an-array-of-objects
'programing' 카테고리의 다른 글
Python을 통해 연결할 때 기본 Mysql 연결 시간 제한을 어떻게 변경할 수 있습니까? (0) | 2021.01.18 |
---|---|
부트 스트랩 : 열 사이에 여백 / 패딩 공간 추가 (0) | 2021.01.18 |
Amazon RDS : 기존 인스턴스로 스냅 샷 복원 (0) | 2021.01.18 |
java.lang.noclassdeffounderror : com.google.android.gms.R $ styleable (0) | 2021.01.17 |
UITableView에서 프로토 타입 셀의 왼쪽 여백을 어떻게 조정합니까? (0) | 2021.01.17 |