2

我正在寻找从数组中检索特定数据,例如

$array[] = "test type: human; Including all the test; number of participants 2 persons + additional  $50";

我只考虑以下类型的信息:

输出:

array[1] test type: human; 
array[2] 2

我应该只能在输出中显示这些信息。每个案例的测试类型会有所不同,其他订单的参与者人数也会有所不同。我只想从给定的数组中获取上述基本信息。我研究了用分号分解给定数组,然后使用子字符串来获得所需的结果。但是寻找任何有效的方法来检索数据。任何帮助或建议都非常感谢。

4

4 回答 4

5

您似乎误解了数组与字符串。

数组
http://php.net/manual/en/language.types.array.php

字符串(变量)
http://www.php.net/manual/en/language.variables.basics.php

您可以使用当前拥有的变量和字符串方法,但老实说,通过在单个变量/字符串中拥有不同的键和值,您正在为一个痛苦的世界做好准备。这就是数组的用途!

字符串是单个实体,可能是许多字符或单词等,但应该在您想要一件事时使用。$TheName = "鲍勃";
数组是您想要一次性存储、操作和使用多个字符串或数据集的时候。即大量的数据库结果。

因此,在我看来,您需要使用数组。为了使您的代码成为一个数组,您可以执行以下操作:

$array = array(
               "test type" => "human", 
               "number of participants" => "2 persons", 
                "additional" => "$50"
               );

数组的 KEY 是 "" 中的第一个文本,然后使用 为该 KEY 分配一个 VALUE =>,然后引号中的下一个文本是 VALUE。您用逗号分隔每个 KEY 和 VALUE 对,数组中的最终 KEY 和 VALUE 对不需要逗号。

上面是手动创建的,但是您可以在数据库查询的循环中创建它。将上面手动分配的 KEY 名称替换为可能的数据库列名称,而 VALUE 可能是该字段的数据。

至于您的问题“从数组中获取特定数据”,然后您将循环数组,将每个 KEY 的 VALUE 回显或分配给一个变量。
例如

foreach ($array as $key => $value)
  {
    echo "The ."$key." is ".$value;
  }

您确实需要阅读一些有关基础知识的教程。这是一个问答网站,虽然我们会帮助您解决您遇到的问题,但您需要先了解您正在编码的内容的基础知识,然后才能提出相关问题。
与上面一样,答案不是问题的答案,而是可以在 Stack Exchange 网站、论坛和教程上找到的指南或教程 :)

于 2013-09-06T15:39:00.030 回答
2

您误解了PHP 中字符串数组之间的区别。区分两者至关重要。我假设您的数据是字符串格式。

字符串操作来拯救!如果您的数据没有可识别的模式或格式,则很难提取所需的信息。如果您的字符串始终以分号开头test type:并且其后面的值始终以分号结尾,您可能会执行以下操作(不理想,但很简单):

$str = 'test type: human; Including all the test; number of participants 2 persons + additional  $50';
$testType = substr($str, 11, strpos($str, ';')-11); // 11 == len('test type: ')

同样,如果您的字符串始终包含number of participants紧接在所需数据之前的文本,并且该数据之后紧​​接有空格,您可以使用:

$start = strpos($str, 'number of participants') + 23;
$numPart = substr($str, $start, strpos($str, ' ', $start+1) - $start);

为了简洁起见,我对索引进行了硬编码,但它们很容易被字符串搜索函数(尤其是正则表达式)替换。

资源:

于 2013-09-06T15:40:42.033 回答
2

我有两种可能的方法来获得你的结果,当然还有很多其他方法,但它不是最简单的。

如果您的 STRING 永远不会改变,您可以使用选项 2,否则选项 1

<?php

$array[] = "test type: human; Including all the test; number of participants 2 persons + additional  $50";

// option 1
if (preg_match_all('#test type:(.*);#Usi', $array[0], $a)) {
    echo 'test type --> '.trim(implode($a[1]));
}

if (preg_match_all('#participants(.*)persons#Usi', $array[0], $a)) {
    echo '<br />participants --> '.trim(implode($a[1]));
}
// end option 1    

    //just to show string as real array
    $arr = explode(' ', $array[0]);
    echo '<pre>';
        var_dump($arr);
    echo '</pre>';

    echo '<br /><br /><br />';
    // end show

//option 2 , only works if the array, see var_dump from above is always like that
echo 'test type --> '.substr($arr[2], 0, -1);
echo '<br />participants --> '.$arr[10];
// end option 2

?>
于 2013-09-06T15:41:41.713 回答
1

为什么不将数据分成单独的块并将其放入多维数组中,如下所示:

$array[] = explode('; ', "test type: human; Including all the test; number of participants 2 persons + additional  $50");

这会给你:

Array
(
    [0] => Array
        (
            [0] => test type: human
            [1] => Including all the test
            [2] => number of participants 2 persons + additional  $50
        )

)

如果初始字符串的每个部分都有一个键和一个冒号(即“键:一些细节”),它会更容易使用,如下所示:

$initial_data = explode('; ', "test type: human; Including: all the test; number of participants: 2 persons + additional  $50");
$clean_up = array();
foreach ($initial_data as $data) {
  $clean = explode(': ', $data);
  $clean_up[$clean[0]] = $clean[1];
}
$array[] = $clean_up;

这将使您的数组看起来像这样:

Array
(
    [0] => Array
        (
            [test type] => human
            [Including] => all the test
            [number of participants] => 2 persons + additional  $50
        )

)
于 2013-09-06T15:59:43.047 回答