Php 数组的比较索引名失败/如何比较数组的索引名

Php 数组的比较索引名失败/如何比较数组的索引名,php,arrays,multidimensional-array,foreach,compare,Php,Arrays,Multidimensional Array,Foreach,Compare,我有一个函数名为repeat 如果数组键=='repeat',我想重复数组值 但是我的if($k=='repeat')比较失败 我的比较有什么问题 function repeat($schema, $repeat = array()){ foreach($schema as $k => $v){ if($k=='repeat') 第三行在重复功能内工作不正常 $schema = array( array( 'tag' => 'div',

我有一个函数名为repeat

如果数组键=='repeat',我想重复数组值

但是我的if($k=='repeat')比较失败

我的比较有什么问题

function repeat($schema, $repeat = array()){

    foreach($schema as $k => $v){
if($k=='repeat')

第三行在重复功能内工作不正常

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        'repeat' => array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
        )
    )
);

$repeat = array('Country Name' => 'Usa', 'City Name' => 'Newyork');

 // Recursive String Replace - recursive_array_replace(mixed, mixed, array);
function recursive_array_replace($find, $replace, $array){
    if (!is_array($array)){
        return str_replace($find, $replace, $array);
    }
    $newArray = array();
    foreach ($array as $key => $value) {
        $newArray[$key] = recursive_array_replace($find, $replace, $value);
    }
    return $newArray;
}


function repeat($schema, $repeat = array()){
    foreach($schema as $k => $v){
        if($k == 'repeat'){
            foreach($repeat as $rk => $rv){
                $value = recursive_array_replace('title', $rk, $v);
                $value = recursive_array_replace('subject', $rv, $value);
                $info[] = $value;
            }
        }
    }
    //$schema = recursive_array_replace('repeat', $repeat, $schema);
    return $info;
}

print_r(repeat($schema, $repeat));
更新1

模式可能是

$schema = array(
    'tag' => 'div',
    'class' => 'lines',
    array(
        'tag' => 'div',
        'class' => 'lines',
        'repeat' => array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => 'title',
            ),
            'key' => 'subject',
        )
    )
);
更新2

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
            'repeat' => array(
                'tag' => 'div',
                 array(
                    'tag' => 'span',
                    'style' => 'margin:10px; padding:10px',
                    'key' => 'title',
                ),
                'key' => 'subject',
            )
        )
    )
);

在我看来,由于
$schema
变量没有
'repeat'
键,所以隔离区失败

您可以对
$schema
变量中的所有项执行
foreach
,但是(更新之前)只有一项:数组。更新后有三个项,分别有键
'tag'
'class'
,还有一个数组没有键,因此它会自动分配给0

在这两种情况下,您都可以通过引用数组的第0项(通过
$schema[0]['repeat']
)来访问
'repeat'

如果没有其他错误(我没有检查),您应该更换

foreach($schema as $k => $v){

这将引用嵌套数组;但是,仅当
$schema
数组中没有其他数字键时

为了确保这一点,您可以首先检查哪个项是数组,例如

foreach($schema as $item){ // this is only an auxiliary loop
  if(is_array($item)){
    $new_schema=$item;
    break;
  }
}
然后移动到主循环:

foreach($new_schema as $k => $v){
等等

更新2后


您需要找到自己的方式来访问
'repeat'
键。您可以迭代地执行此操作。在您的代码中,您访问了错误的数组,第一级没有“repeat”键,但您应该更深入。

您的
$schema
是嵌套数组。您应该修改它或迭代
$schema[0]
$schema的
foreach
,$schema没有常量值,始终可以更改$架构[0]可能会在其他情况下失败。我需要比较值的索引名。您可以检查
是否为数组($schema[0])
,如果为true,则将
$schema
(您的局部变量)分配给
$schema[0]
@Voitcus在“repeat”标记前后可能有不同的数组。数组可能会失败。我无法帮助您,因为我不知道您的意图是什么。由于
$schema
变量中没有“repeat”键,但
$schema[0]
中存在一个,因此该分区失败。我并没有测试你们的代码的有效性(这就是为什么我不把它作为一个答案发布的原因),我怎么能迭代地这样做呢?你能再解释一下吗?与其在
repeat
函数中迭代,为什么不找到
“repeat
”键?这是你唯一使用的。在这本书中,有很多在多维数组中查找特定键的例子。同时检查结果是否正常。但是我找不到可以比较的。
foreach($new_schema as $k => $v){