たとえば、オブジェクト プロパティ 'bar' = b のオブジェクトが 1 つだけ配列に含まれるように、オブジェクトの配列を変換する必要があります。
だから私は回したいと思います:
Array ( [0] => stdClass Object (
[id] = 1
[foo] => 'a'
[bar] => 'b' )
[1] => stdClass Object (
[id] => 2
[foo] => 'a'
[bar] => 'c' )
[2] => stdClass Object (
[id] => 3
[foo] => 'y'
[bar] => 'b' ) )
の中へ:
Array ( [0] => stdClass Object (
[id] = 1
[foo] => 'a'
[bar] => 'b' )
[1] => stdClass Object (
[id] => 2
[foo] => 'a'
[bar] => 'c' )
ただし、これを大規模に機能させる必要があるため、array_filter、array_udiff、および array_slice を組み合わせて必要なものを取得する方法に困惑しています。私は、array_filter がすべてのキーを取得すると考えていました'foo' = 'b'
。次に、この配列を取得し、元の配列に対して array_udiff を取得して、アイテムを取得できます'foo'=! 'b'
。次に、array_filter から一致をスライスして単一のキー配列を取得し、それを array_udiff の違いとマージします。
$matches = array_filter($array, "bar_filter");
$remainder = array_udiff($array, $matches, 'compare_objects');
$single = array_slice( $matches, 0, 1);
$result = array_merge($single, $remainder);
function foobar_filter($obj) {
if ( $obj->bar == 'b' ) {
return true;
} else {
return false;
}
}
function compare_objects($obj_a, $obj_b) {
return $obj_a->id = $obj_b->id;
}
私のcompare_objects関数は確かにオフになっていますが、何をそこに置くべきかわかりません。一致しない項目を取得するために、2 つ目の array_filter を実行したほうがよいでしょうか? 配列をキー where'bar'='b'
と whereに分割し、'bar'!='b'
それを 1 つのオブジェクト where だけにマージする必要があります。'bar'='b'