【问题标题】:Str_replace inside mutlidimensional array多维数组中的str_replace
【发布时间】:2021-02-09 00:17:39
【问题描述】:

我有一个多维数组如下,这是一个鞋码及其转换的PHP数组...

$size_array = array(
"M"=>array(
    '6'=>   array('uk'=>'6','eu'=>'39.5','us'=>'7'),
    '6H'=>  array('uk'=>'6.5','eu'=>'40','us'=>'7.5'),
    '7'=>   array('uk'=>'7','eu'=>'40.5','us'=>'8'),
    '7H'=>  array('uk'=>'7.5','eu'=>'41','us'=>'8.5'),
    '8'=>   array('uk'=>'8','eu'=>'42','us'=>'9'),
    '8H'=>  array('uk'=>'8.5','eu'=>'42.5','us'=>'9.5'),
    '9'=>   array('uk'=>'9','eu'=>'43','us'=>'10'),
    '9H'=>  array('uk'=>'9.5','eu'=>'44','us'=>'10.5'),
    '10'=>  array('uk'=>'10','eu'=>'44.5','us'=>'11'),
    '10H'=> array('uk'=>'10.5','eu'=>'45','us'=>'11.5'),
    '11'=>  array('uk'=>'11','eu'=>'46','us'=>'12'),
    '11H'=> array('uk'=>'11.5','eu'=>'46.5','us'=>'12.5'),
    '12'=>  array('uk'=>'12','eu'=>'47','us'=>'13'),
    '12H'=> array('uk'=>'12.5','eu'=>'48','us'=>'13.5'),
    '13'=>  array('uk'=>'13','eu'=>'48.5','us'=>'14')
    ),
"F"=>array(
    '3'=>   array('uk'=>'3','eu'=>'35.5','us'=>'5'),
    '3H'=>  array('uk'=>'3.5','eu'=>'36','us'=>'5.5'),
    '4'=>   array('uk'=>'4','eu'=>'37','us'=>'6'),
    '4H'=>  array('uk'=>'4.5','eu'=>'37.5','us'=>'6.5'),
    '5'=>   array('uk'=>'5','eu'=>'38','us'=>'7'),
    '5H'=>  array('uk'=>'5.5','eu'=>'38.5','us'=>'7.5'),
    '6'=>   array('uk'=>'6','eu'=>'39','us'=>'8'),
    '6H'=>  array('uk'=>'6.5','eu'=>'39.5','us'=>'8.5'),
    '7'=>   array('uk'=>'7','eu'=>'40','us'=>'9'),
    '7H'=>  array('uk'=>'7.5','eu'=>'41','us'=>'9.5'),
    '8'=>   array('uk'=>'8','eu'=>'41.5','us'=>'10'),
    '8H'=>  array('uk'=>'8.5','eu'=>'42.5','us'=>'10.5'),
    '9'=>   array('uk'=>'9','eu'=>'43','us'=>'11'),
    '9H'=>  array('uk'=>'9.5','eu'=>'43.5','us'=>'11.5'),
    '10'=>  array('uk'=>'10','eu'=>'44','us'=>'12')
    )
);

该数组是函数的一部分,该函数根据提供的大小和性别返回转换(即SizeConvert('M','6') 返回Array ([uk] => 6, [eu] => 39.5,[us] => 7))。

我想扩展函数以允许传递一个值,该值将返回数组结果,其中任何 0.5 值替换为 ½(或 ½)(即 SizeConvert('M','6','Y') 返回 Array ([uk] => 6, [eu] => 39½,[us] => 7)

如何让 str_replace(或更合适的命令)遍历数组并替换值?

我尝试过类似str_replace(".5", "&frac12", $size_array) 的方法,但我想这不起作用,因为它只查看初始数组,而不是子数组。

【问题讨论】:

  • 功能码在哪里?它应该在SizeConvert 内完成。或者先取值,拿到平面数组后,再做str_replace

标签: php arrays


【解决方案1】:

您试图在没有真正原因的情况下将其应用于多维数组。如果您准备好 SizeConvert 函数并返回一维数组,只需在返回值之前应用转换即可:

function SizeConvert(/* other parameters */, bool $convertOneHalf) {
    $match = ... // your code to find the match
    return $convertOneHalf
        ? str_replace('.5', '½', $match)
        : $match;
}

根据指示是否应应用转换的参数的布尔值,我们通过三元返回修改或未修改的结果。

【讨论】:

  • 我明白你在说什么 - 在午夜不假思索地发布了原始问题。不确定我是否理解您的语法 - 这是基于布尔值执行 IF 语句的更快方法吗?
  • 它被称为ternary operator,它是if 条件的语法糖。基本上你可以像if : then ? else一样阅读它。
  • 优秀。从来不知道他们,但是是的,这是节省了打字的负担!
【解决方案2】:

不要想太多,使用 for loop 循环遍历数组中的所有元素并使用 if...else... 检查 0.5

if($array[index]=="0.5") { 
    $array[index]="½"; 
} else {
    $array[index]=str_replace(".5", "½", $array[index]);
}

我编写了一个简单的代码,它不完全是您问题的答案,但您可以使用它背后的逻辑。下面的代码会将数组中的所有 0.5 更改为 1⁄2,但由于您已经获取了数据,因此无需有这么多 nested-loop,只需 1 级循环即可遍历数组中的所有元素够了。

<?php
$size_array = array(
    "M" => array(
        '6' => array(
            'uk' => '6',
            'eu' => '39.5',
            'us' => '7'
        ) ,
        '6H' => array(
            'uk' => '6.5',
            'eu' => '40',
            'us' => '7.5'
        ) ,
        '7' => array(
            'uk' => '7',
            'eu' => '40.5',
            'us' => '8'
        )
    ) ,
    "F" => array(
        '3' => array(
            'uk' => '3',
            'eu' => '35.5',
            'us' => '5'
        ) ,
        '3H' => array(
            'uk' => '3.5',
            'eu' => '36',
            'us' => '5.5'
        ) ,
        '4' => array(
            'uk' => '4',
            'eu' => '37',
            'us' => '6'
        )
    )
);

foreach ($size_array as $firstLevel)
{
    foreach ($firstLevel as $secondLevel)
    {
        foreach ($secondLevelas $values)
        {
            if ($values== "0.5")
            {
                echo $values= "&frac12;";
            }
            else
            {
                echo $values= str_replace(".5", "&frac12;", $values);
            }
        }
    }
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多