0

基本上按照标题。以下代码运行良好,但似乎是一个相当冗长的过程来完成看似相当简单的任务。

我将看看 foreach 如何替代它,但我想知道是否真的正确地解决了这个问题。

编辑:例如,我看到人们使用“{}”来连接而不是“。” 说它更快,但我一直无法让他们在这段代码中工作。

<?php
// Create Array
    $foobar = array(
        "foo" => "test1",
        "bar" => "hello",
        "far" => "this",
        "boo" => "is",
    //  "foo_result" => "", // Uncomment to check that function does nothing where foo_result already available
    "foo_link" => "http://1.media.collegehumor.cvcdn.com/82/16/162e153d618d49869783ccd475005fd5.jpg",
    "for" => "cool"
);

function _insertarray($foobar) {
// provide arrays to test against
    $foo1 = array("test1","test2");
    $foo2 = array("test3","test4");
    $foo3 = array("test5","test6");
    $foo4 = array("test7","test8");

// End function where "foo_result" is already set
    if (isset($foobar['foo_result'])) {
        // Nothing to do
    }
    else { 

    // add the variable to the foo_result index based on values returned
        if ((count(array_intersect($foo1, $foobar))) ? true : false) {
            $foobar['foo_result'] = "<iframe src='" . $foobar["foo_link"] . "'>";
        }
        else if ((count(array_intersect($foo2, $foobar))) ? true : false) {
            $foobar['foo_result'] = "<a href='" . $foobar["foo_link"] . "'>";
        }
        else if ((count(array_intersect($foo3, $foobar))) ? true : false) {
            $foobar['foo_result'] = "<img src='" . $foobar["foo_link"] . "'>";
        }
        else if ((count(array_intersect($foo4, $foobar))) ? true : false) {
            $foobar['foo_result'] = "<iframe src='" . $foobar["foo_link"] . "'>";
        }
        else {
            // Nothing to do here
        }
    }
    return $foobar;     
}
    print_r(_insertarray($foobar));
?>

提前致谢

4

1 回答 1

3

我认为这在 CPU 时间上不会快得多,但它通过删除所有重复来简化代码。

$test_array = array(
  array('check' => array("test1", "test2"),
        'format' => '<iframe src="%s">'),
  array('check' => array("test3", "test4"),
        'format' => '<a href="%s">'),
  array('check' => array("test5", "test6"),
        'format' => '<img src="%s">'),
  array('check' => array("test7", "test8"),
        'format' => '<iframe src="%s">'));

foreach ($test_array as &$el) {
  if (array_intersect($foobar, $el['check'])) {
    $foobar['foo_result'] = sprintf($el['format'], $foobar["foo_link"]);
    break;
}

array_intersect可能是瓶颈,但前提是您的阵列非常大。如果是这种情况,我建议您编写一个arrays_have_common_element更有效地执行此操作的函数(您可以将其中一个数组转换为关联数组的键(该函数array_flip()将为您执行此操作),然后遍历另一个数组,直到它找到匹配项)。

于 2013-04-21T04:27:59.353 回答