Php 设置多维数组的内部值

Php 设置多维数组的内部值,php,Php,我想要的是,如果我有数组('B2WGUR0276','TMT Steel'),并且一旦它的最后一个值为true,那么对于('B2WGUR0276','TMT Steel')的所有相同组合,将它的最后一个值设置为true $for_数量为内部数组中的第三个元素设置true或false <?php $b=array (array('B2WGUR0276 ','TMT Steel','10','false'), array('B2WGUR0276','TMT Steel

我想要的是,如果我有
数组('B2WGUR0276','TMT Steel')
,并且一旦它的最后一个值为true,那么对于
('B2WGUR0276','TMT Steel')的所有相同组合,将它的最后一个值设置为true

$for_数量为内部数组中的第三个元素设置true或false

<?php
    $b=array
    (array('B2WGUR0276 ','TMT Steel','10','false'),
     array('B2WGUR0276','TMT Steel','5','true'),
     array('B2WGUR0276','Jindal JSW ','10','false'),
     array('B2WGUR0276 ','TMT Steel','10','false')
    );
    $f=array(array('B2WGUR0276 ','TMT Steel'),array('B2WGUR0276','Jindal JSW '),array('B2WGUR0276 ','TMT Steel'));
    foreach($b as $key=>$keys) {
        if($for_quantity=='true'&&in_array($f,$b)) {
            $b[$key][3]='true';
        }
    }

?>
给定数组$b,您可以使用:

$match = array_flip(array_map(function ($row) {
    return end($row) === 'true' ? $row[0] . "|" . $row[1] : "";
}, $b));
foreach ($b as &$row) { 
    $row[count($row)-1] = isset($match[$row[0] . "|" . $row[1]]) ? 'true' : 'false';
}
在此代码之后,$b将按您希望的那样


看到它继续运行。

听起来不错。现在,如何将最后一个值更新为true,以及到目前为止您尝试了什么?我已经在_array中使用了,然后在foreach循环中设置$b[$key][3]='true'@anant的值将您的代码努力放在这里,我们将告诉您如何更正我在edit@AnantIs中输入的iti,而不是($for_quantity='true'&&in_array($f,$b))应该是if($for_quantity=='true'和&in_array($f,$b))它也为这个组合设置了true('B2WGUR0276','Jindal JSW')@trincot,因为它不同于('B2WGUR0276','TMT Steel')。@trincot你能解释一下你是如何准确地为('B2WGUR0276','TMT Steel')这样做的吗@trincotSure,第一个循环将前两个值连接到
'B2WGUR0276 | TMT Steel'
,并将其放入一个新数组中(对于任何其他行都是一样的)。因此,您有
数组('B2WGUR0276 | TMT Steel','b2w9999 | Otherstuff',…)
。然后它用值翻转键,您得到:
数组('B2WGUR0276 | TMT Steel'=>0,'B2W9999 | Otherstuff'=>1,…)
。此翻转也会使这些值都是唯一的。然后此数组是第二个循环的查找数组。如果我有多个记录并选择一个特定值,该怎么办?@trincot
$match = array_flip(array_map(function ($row) {
    return end($row) === 'true' ? $row[0] . "|" . $row[1] : "";
}, $b));
foreach ($b as &$row) { 
    $row[count($row)-1] = isset($match[$row[0] . "|" . $row[1]]) ? 'true' : 'false';
}