Php 比较对象的两个多维数组,并在较大的集合上设置新属性true/false挂起匹配
我有一个对象数组示例: 较大的一组:Php 比较对象的两个多维数组,并在较大的集合上设置新属性true/false挂起匹配,php,arrays,multidimensional-array,comparison,Php,Arrays,Multidimensional Array,Comparison,我有一个对象数组示例: 较大的一组: Array( [0] stdClass Object( [ID] => 1, [name] => monkey, [sub] => help ), [1] stdClass Object(
Array(
[0] stdClass Object(
[ID] => 1,
[name] => monkey,
[sub] => help
),
[1] stdClass Object(
[ID] => 1,
[name] => tooth,
[sub] => tip
),
[2] stdClass Object(
[ID] => 1,
[name] => who,
[sub] => knows
),
)
小套
Array(
[0] stdClass Object(
[ID] => 1,
[name] => monkey,
[sub] => help
)
预期结果:
Array(
[0] stdClass Object(
[ID] => 1,
[name] => monkey,
[sub] => help,
[selected] => yes
),
[1] stdClass Object(
[ID] => 1,
[name] => tooth,
[sub] => tip,
[selected] => no
),
[2] stdClass Object(
[ID] => 1,
[name] => who,
[sub] => knows,
[selected] => no
),
)
我想玩的东西似乎不起作用
foreach($result_static as $stock)
{
foreach($result_memb as $memb_choice)
{
$stock->selected = "false";
//echo $stock->name .' == '. $memb_choice->name.'<br>';
if($stock->name == $memb_choice->name)
{
$stock->selected = "yes";
}
}
$output[] = $stock;
}
foreach($result\u静态为$stock)
{
foreach($result\u memb作为$memb\u选项)
{
$stock->selected=“false”;
//echo$stock->name.'='.$memb_choice->name.'
';
如果($stock->name==$memb_choice->name)
{
$stock->selected=“yes”;
}
}
$output[]=$stock;
}
这似乎与任何实际结果都不匹配,从我收集的信息来看,我的foreach逻辑是错误的,因为它多次重新启动第二个循环,或者第一个循环以这种方式与另一个循环重复,每个循环的名称永远不会与我希望的方式相匹配。因此,我正在尝试寻找如何更好地解决这一问题的方法,希望能有一些更优化的方法,但我会采用目前可以得到的方法。试试这个
foreach($result_static as $stock)
{
$stock->selected = "false";
foreach($result_memb as $memb_choice)
{
if($stock->name == $memb_choice->name)
{
$stock->selected = "yes";
}
}
$output[] = $stock;
}
我在你的代码中找不到bug,可能是在别的地方 我尝试重新创建它,下面的代码运行并提供所需的输出:
class Item
{
public $Id;
public $Name;
public $Sub;
public $Selected;
public function __construct($id, $name, $sub)
{
$this->Id = $id;
$this->Name = $name;
$this->Sub = $sub;
}
}
$result_static = array(
new Item(1, 'monkey', 'help'),
new Item(1, 'tooth', 'tip'),
new Item(1, 'who', 'known')
);
$result_memb = array(new Item(1, 'monkey', 'help'));
$output = array();
foreach($result_memb as $memb_choice)
{
foreach($result_static as $stock)
{
$stock->Selected = "false";
if($stock->Name == $memb_choice->Name)
{
$stock->Selected = "yes";
}
$output[] = $stock;
}
}
print_r($output);
这将提供以下输出:
Array
(
[0] => Item Object
(
[Id] => 1
[Name] => monkey
[Sub] => help
[Selected] => yes
)
[1] => Item Object
(
[Id] => 1
[Name] => tooth
[Sub] => tip
[Selected] => false
)
[2] => Item Object
(
[Id] => 1
[Name] => who
[Sub] => known
[Selected] => false
)
)