我有一个结果数组,每个数组索引表示各种对象的组合(结果来自条令查询)
我想将这些值组合到相同的索引中,就像您在示例=>中看到的那样。Array[0]有两个对象值"0"和名称,所以我想将它们组合到0索引中的新数组中,依此类推。这样我就可以对新结果进一步处理。
array (size=4)
0 =>
object(stdClass)[568]
public '0' =>
object(stdClass)[552]
public 'id' => int 16
public 'userId' => int 250
public 'content' => string '<script>alert('Alert');</script>
adad adad adad
### Heading' (length=61)
public 'name' => string 'biling' (length=13)
1 =>
object(stdClass)[556]
public '0' =>
object(stdClass)[554]
public 'id' => int 15
public 'userId' => int 250
public 'content' => string '<script>alert('Alert');</script>
adad
### Heading' (length=51)
public 'name' => string 'biling' (length=13)
我尝试了一些代码,但我面临的真正问题是,它没有删除或取消设置0索引,并且显示偏移量"0"是未定义的
代码
$results = 'Object Result which i shown';
$data = array();
foreach ($results as $key => $item) {
$resultsCopyArray = array_diff_key((array)$item, [0]);
//this function must escape 0 index from $item and just add name to $resultsCopyArray but it's now working like it should be
var_dump(array_keys($resultsCopyArray));
// -> showing 0, name
// var_dump($resultsCopyArray[0]); -> showing error
// I also tried to unset this value but noting
$data[] = (array)$item->{'0'} + $resultsCopyArray;
}
var_dump($data);
这是一个"PHP数组陷阱"。
array_diff_key
使用密钥上的严格比较($k1 === $k2
)。直接构建的PHP数组(简单地说)使用优化:将数字字符串转换为数字。所以严格的比较失败了:"0" !== 0
。
但微弱的比较也会失败。你可以在这里看到。
<?php
function key_compare_func($key1, $key2)
{
var_dump($key1, $key2, $key1 == $key2, $key1 > $key2);
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$a=new stdClass;
$a->{"0"}=1;
$a->n=2;
echo "key'n";
var_dump(array_diff_key((array)$a, [0]));
echo "ukey'n";
var_dump(array_diff_ukey((array)$a, [0], 'key_compare_func'));
输出
key
array(2) {
["0"]=>
int(1)
["n"]=>
int(2)
}
ukey
string(1) "0"
int(0)
bool(true)
bool(false)
string(1) "n"
int(0)
bool(true)
bool(false)
array(0) {
}
如果你确定你只有字符串键,请使用代码
<?php
function key_compare_func($key1, $key2)
{
if ((string)$key1 == (string)$key2)
return 0;
else if ((string)$key1 > (string)$key2)
return 1;
else
return -1;
}
$a=new stdClass;
$a->{"0"}=1;
$a->n=2;
var_dump(array_diff_ukey((array)$a, [0], 'key_compare_func'));
输出
array(1) {
["n"]=>
int(2)
}