PHP in_数组不会检查所有情况

PHP in_数组不会检查所有情况,php,arrays,Php,Arrays,在PHP中,我正在从数组中删除值。在数组中使用检查,但出于某种原因,它不希望检查排除数组的整个长度。运行此代码会从数组中删除道奇条目,但不会从丰田中删除,这是为什么 <?php $inventory = array( '0' => Array ( 'car_name' => 'Dodge', 'set_name' => 'A',

在PHP中,我正在从数组中删除值。在数组中使用
检查,但出于某种原因,它不希望检查
排除数组的整个长度。运行此代码会从数组中删除道奇条目,但不会从丰田中删除,这是为什么

<?php

    $inventory = array(
        '0' => Array
            (
                'car_name' => 'Dodge',
                'set_name' => 'A',
                'edition' => 'B41',
                'location' => 'Houston'
            ),

        '1' => Array
            (
                'car_name' => 'Dodge',
                'set_name' => 'A',
                'edition' => 'B41',
                'location' => 'Houston'
            ),

        '2' => Array
            (
                'car_name' => 'Dodge',
                'set_name' => 'A',
                'edition' => 'B41',
                'location' => 'Houston'
            ),

        '3' => Array
            (
                'car_name' => 'Dodge',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '4' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '5' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '6' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '7' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '8' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '9' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '10' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'
            ),

        '11' => Array
            (
                'car_name' => 'Toyota',
                'set_name' => 'A',
                'edition' => 'VarA31',
                'location' => 'Houston'

            ),
    );

    $exclude = array('Dodge','Toyota');

    for($k=0; $k<sizeof($inventory); $k++)
    {
    if(in_array(trim($inventory[$k]['car_name']), $exclude))
    {   unset($inventory[$k]);}

    }

         $inventory = array_values($inventory);
         echo '<pre>';
         print_r($inventory);
         echo '</pre>';



    ?>

您的问题是,从枚举数组中取消设置元素将调整数组的大小,但是使用
sizeof()
进行测试以查看是否应该退出循环,因此每次取消设置的迭代都会减少剩下的测试值的数量

$exclude = array('Dodge','Toyota');
$filtered = array();

for($k=0; $k<sizeof($inventory); $k++){
    if(in_array(trim($inventory[$k]['car_name']), $exclude)){
        // dont do this because it is changing the count of elements in the array unset($inventory[$k]);
    } else {
        $filtered[] = $inventory[$k]; // push the desired values into a new array
    }
}

echo '<pre>';
print_r($filtered);  // this should have the values that don't have 'Dodge' or 'Toyota'
echo '</pre>';
$exclude=array('Dodge','Toyota');
$size=sizeof($inventory);
对于($k=0;$size;$k++){
if(在数组中(trim($inventory[$k]['car\u name']),不包括$exclude)){
未结算(存货[$k]);
}
}
$inventory=数组_值($inventory);
回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';
打印(库存); 回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';

您的问题是,从枚举数组中取消设置元素将调整数组的大小,但是使用
sizeof()
进行测试以查看是否应该退出循环,因此每次取消设置的迭代都会减少剩下的测试值的数量

$exclude = array('Dodge','Toyota');
$filtered = array();

for($k=0; $k<sizeof($inventory); $k++){
    if(in_array(trim($inventory[$k]['car_name']), $exclude)){
        // dont do this because it is changing the count of elements in the array unset($inventory[$k]);
    } else {
        $filtered[] = $inventory[$k]; // push the desired values into a new array
    }
}

echo '<pre>';
print_r($filtered);  // this should have the values that don't have 'Dodge' or 'Toyota'
echo '</pre>';
$exclude=array('Dodge','Toyota');
$size=sizeof($inventory);
对于($k=0;$size;$k++){
if(在数组中(trim($inventory[$k]['car\u name']),不包括$exclude)){
未结算(存货[$k]);
}
}
$inventory=数组_值($inventory);
回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';
打印(库存); 回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';

您的问题是,从枚举数组中取消设置元素将调整数组的大小,但是使用
sizeof()
进行测试以查看是否应该退出循环,因此每次取消设置的迭代都会减少剩下的测试值的数量

$exclude = array('Dodge','Toyota');
$filtered = array();

for($k=0; $k<sizeof($inventory); $k++){
    if(in_array(trim($inventory[$k]['car_name']), $exclude)){
        // dont do this because it is changing the count of elements in the array unset($inventory[$k]);
    } else {
        $filtered[] = $inventory[$k]; // push the desired values into a new array
    }
}

echo '<pre>';
print_r($filtered);  // this should have the values that don't have 'Dodge' or 'Toyota'
echo '</pre>';
$exclude=array('Dodge','Toyota');
$size=sizeof($inventory);
对于($k=0;$size;$k++){
if(在数组中(trim($inventory[$k]['car\u name']),不包括$exclude)){
未结算(存货[$k]);
}
}
$inventory=数组_值($inventory);
回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';
打印(库存); 回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';

您的问题是,从枚举数组中取消设置元素将调整数组的大小,但是使用
sizeof()
进行测试以查看是否应该退出循环,因此每次取消设置的迭代都会减少剩下的测试值的数量

$exclude = array('Dodge','Toyota');
$filtered = array();

for($k=0; $k<sizeof($inventory); $k++){
    if(in_array(trim($inventory[$k]['car_name']), $exclude)){
        // dont do this because it is changing the count of elements in the array unset($inventory[$k]);
    } else {
        $filtered[] = $inventory[$k]; // push the desired values into a new array
    }
}

echo '<pre>';
print_r($filtered);  // this should have the values that don't have 'Dodge' or 'Toyota'
echo '</pre>';
$exclude=array('Dodge','Toyota');
$size=sizeof($inventory);
对于($k=0;$size;$k++){
if(在数组中(trim($inventory[$k]['car\u name']),不包括$exclude)){
未结算(存货[$k]);
}
}
$inventory=数组_值($inventory);
回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';
打印(库存); 回声';
$exclude = array('Dodge','Toyota');

$size = sizeof($inventory);
for($k=0; $size; $k++) {
    if(in_array(trim($inventory[$k]['car_name']), $exclude)) {
        unset($inventory[$k]);
    }
}

$inventory = array_values($inventory);
echo '<pre>';
print_r($inventory);
echo '</pre>';

您正在从数组中删除index:value对,同时对其进行迭代。因此,在取消设置一个值后,索引位置不匹配,甚至不存在

尝试将确实需要的值复制到新的空数组中,如下所示:

$exclude=array('Dodge','Toyota');
$filtered=array();

对于($k=0;$k您正在从数组中删除index:value对,同时对其进行迭代。因此,在取消设置值后,索引位置不匹配,甚至不存在

尝试将确实需要的值复制到新的空数组中,如下所示:

$exclude=array('Dodge','Toyota');
$filtered=array();

对于($k=0;$k您正在从数组中删除index:value对,同时对其进行迭代。因此,在取消设置值后,索引位置不匹配,甚至不存在

尝试将确实需要的值复制到新的空数组中,如下所示:

$exclude=array('Dodge','Toyota');
$filtered=array();

对于($k=0;$k您正在从数组中删除index:value对,同时对其进行迭代。因此,在取消设置值后,索引位置不匹配,甚至不存在

尝试将确实需要的值复制到新的空数组中,如下所示:

$exclude=array('Dodge','Toyota');
$filtered=array();

对于($k=0;$k使用
foreach
代替($k=0;$k使用
foreach
代替
用于($k=0;$k使用
foreach
代替
用于($k=0;$k使用
foreach
代替
用于($k=0;$kinu数组()多维数组不起作用。此处$exclude数组中可能使用了@user2058037-in_数组的副本,这将起作用。这是一个很好的例子,说明为什么增量
for
循环在支持某种
foreach
构造的语言中不经常使用。如果您通过
foreach执行此操作($inventory as$k=>$v)
你会发现它更容易管理。这样想-如果你必须“做一件事N次”,使用增量
for
循环。如果你必须“对集合中的每个元素做一件事”,请改为选择一个
foreach
。in_array()多维数组不起作用。此处$exclude数组中可能使用了@user2058037-in_数组的副本,这将起作用。这是一个很好的例子,说明为什么增量
for
循环在支持某种
foreach
构造的语言中不经常使用。如果您通过
foreach执行此操作($inventory as$k=>$v)
你会发现它更容易管理。这样想-如果你必须“做一件事N次”,使用增量
for
循环。如果你必须“对集合中的每个元素做一件事”,请改为选择一个
foreach
。in_array()多维数组不起作用。此处$exclude数组中可能使用了@user2058037-in_数组的副本,这将起作用。这是一个很好的例子,说明为什么增量
for
循环在支持某种
foreach
构造的语言中不经常使用。如果您通过
foreach执行此操作($inventory as$k=>$v)
你会发现它更容易管理。这样想-如果你必须“做一件事N次”,使用增量
for
循环。如果你必须“对集合中的每个元素做一件事”,请改为选择一个
foreach
。in_array()多维数组不起作用。此处的$exclude数组可能使用了@user2058037-in_数组的重复项,它将在此处起作用。这是一个尝试