我有一个数组数组,其中包含带有值的数组键,例如:
$text = [
[
0 => ['Andi', 'NOB', false],
1 => ['menginap', 'V', false],
2 => ['di', 'PREP', false],
3 => ['Hotel', 'N', false],
4 => ['Neo', 'NE', false],
5 => ['Malioboro', 'NE', false],
6 => ['selama', 'N', false],
7 => ['satu', 'NUM', false],
8 => ['minggu', 'N',false]
]
];
我也有这个数组:
$flag = [3,4,5,6];
现在,如果标志元素数组在文本键上,那么我将第三个元素从false更改为true。
例如: $ flag [0] = 3,然后我将使用键3将文本更改为:
[3] = > 'Hotel', 'N', true
这就是我现在正在做的事情:
foreach($text as $index => &$tok){
foreach ($tok as $tokkey => &$tokvalue) {
foreach($flag as $key => $value){
if($value == $tokkey){
$tokvalue[2] = true;
}
}
}
}
但是,它并没有改变一切。 非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
这可能会有所帮助。
foreach($text as $index => &$tok){
foreach ($tok as $tokkey => &$tokvalue) {
foreach($flag as $key => $value){
if($value == $tokkey){
$val = explode(",",$tokvalue);
$val[2] = true;
$tokvalue = implode(",",$val);
}
}
}
}
答案 1 :(得分:2)
这里我们使用array_walk
来实现所需的输出。
array_walk($text[0],function(&$value,$key) use($flag){
if(in_array($key, $flag)){ // checking whether the $key is present in the flag array
$value[2]=true;//change the $value second index to true
}
});
答案 2 :(得分:2)
尝试一下,它会为你工作:
$text = [
[
'0' => 'Andi,NOB,false',
'1' => 'menginap,V,false',
'2' => 'di,PREP,false',
'3' => 'Hotel,N,false',
'4' => 'Neo,NE,false',
'5' => 'Malioboro,NE,false',
'6' => 'selama,N,false',
'7' => 'satu,NUM,false',
'8' => 'minggu,N,false'
]
];
$flag = [3,4,5,6] ;
foreach($text as $k=> $value){
foreach($flag as $key=> $val){
$kk[] = explode(',',$value[$val]);
$kk[$key][2] = 'true';
$kkk[] = implode(',',$kk[$key]);
}
}
echo '<pre>'; print_r($kkk);
打印我们想要将false值更改为true值的数组。
以下代码显示所有数据并替换所需的输出:
$text = [
[
['Andi', 'NOB', 'false'],
['menginap', 'V', 'false'],
['di', 'PREP', 'false'],
['Hotel', 'N', 'false'],
['Neo', 'NE', 'false'],
['Malioboro', 'NE', 'false'],
['selama', 'N', 'false'],
['satu', 'NUM', 'false'],
['minggu', 'N.', 'false']
]
];
$flag = [3,4,5,6];
foreach ($text as $k => $value) {
foreach ($value as $kk => $val) {
foreach ($flag as $key) {
if ($key == $kk)
$text[$k][$kk][2] = 'true';
}
}
}
echo '<pre>'; print_r($text);
答案 3 :(得分:1)
我假设这是数组,
class Player(object):
# has a self.hand attribute and a `self.game.deck` attribute
def hit(self):
self.hand.append(self.game.deck.deal(1))
请检查输出here
答案 4 :(得分:1)
如何直接访问$text
?
$text[$index][$tokkey][2] = true;
这样您就不需要使用引用。
$text = [
[
['Andi', 'NOB', false],
['menginap', 'V', false],
['di', 'PREP', false],
['Hotel', 'N', false],
['Neo', 'NE', false],
['Malioboro', 'NE', false],
['selama', 'N', false],
['satu', 'NUM', false],
['minggu', 'N.', false]
]
];
$flag = [3,4,5,6];
foreach ($text as $index => $token) { // outer list
foreach ($token as $i => $t) { //inner list
foreach ($flag as $key) {
if ($key == $i)
$text[$index][$i][2] = true;
}
}
}
print_r($text);
答案 5 :(得分:1)
答案 6 :(得分:1)
没有更清洁/更直接(防错)的方式:
代码 :( Demo)最简单的方式
$flag=3; // index
if(isset($text[0][$flag][2])){$text[0][$flag][2]=true;} // make sure the element exists
如果您有多个标志:
$flags=[3,6,7]; // indices
foreach($flags as $flag){
if(isset($text[0][$flag][2])){$text[0][$flag][2]=true;} // make sure the element exists
}
循环$text
数组的任何方法都有可能运行无用的迭代。这将是低效/差的编码实践。
答案 7 :(得分:0)
您可以遍历标志数组,并将这些键值与所需值的数组相等。
$flag = [1,3];
$text = [
0 => ['a', 'x', true],
1 => ['a', 'y', false],
2 => ['x', 'd', true],
3 => ['x', 's', true],
4 => ['a', 'x', false],
];
foreach ($flag as $key) {
if (isset($text[$key])) {
$text[$key][2] = true;
}
}