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


Comparement index name of array fails / How to compare index name of array

我有一个函数的名称是repeat。

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

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

我的对比有什么问题?

function repeat($schema, $repeat = array()){
    foreach($schema as $k => $v){

如果($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){

foreach($schema[0] 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"键,但您应该更深入。