如何从数组键中获取数字

时间:2014-03-30 17:58:41

标签: php arrays

我有以下数组:

Array
(
    [Ingredient 1 Amount] => Array
        (
            [0] => 2
        )

    [Ingredient 1] => Array
        (
            [0] => lemon  juice (t fresh-squeezed)
        )

    [Ingredient 2 Amount] => Array
        (
            [0] => 3
        )

    [Ingredient 2] => Array
        (
            [0] => 1/2 cups peeled and diced potatoes
        )

    [Ingredient 3 Amount] => Array
        (
            [0] => 1/3
        )

    [Ingredient 3 Size] => Array
        (
            [0] => cup
        )

    [Ingredient 3] => Array
        (
            [0] => diced celery
        )

    [Ingredient 4 Amount] => Array
        (
            [0] => 1/3
        )

    [Ingredient 4 Size] => Array
        (
            [0] => cup
        )

    [Ingredient 4] => Array
        (
            [0] => finely chopped onion
        )

    [Ingredient 5 Amount] => Array
        (
            [0] => 5
        )

    [Ingredient 5 Size] => Array
        (
            [0] => tablespoons
        )

    [Ingredient 5] => Array
        (
            [0] => pickles
        )

)

每个成分集包括Amount,Size和Default。可能有一个或可能有一些丢失,所以我不能只计算数组并​​除以3.我需要知道数组中有多少成分集。这是由最后一个成分集显示的,所以在这种情况下我想要数字" 5"。我该怎么做呢?

- 编辑 -

该数组是从wordpress中的自定义帖子字段构建的。这是我从

回来的
$post_meta = get_post_meta($id);

4 个答案:

答案 0 :(得分:1)

在我看来,你应该重新组织你的阵列。它没有优化。

尝试一下(这是psuedo代码提供的想法)

[Ingredient 1] => Array
    (
        [type] => lemon  juice (t fresh-squeezed),
        [Amount] => lemon  juice (t fresh-squeezed),
        [Size] => lemon  juice (t fresh-squeezed)

 )

答案 1 :(得分:0)

你可以找到像这样的最大值

$max = 0;
foreach($array as $key => $value) {
   if(intval(str_replace("Ingredient ", "", $key)) > $max) {
      $max = intval(str_replace("Ingredient ", "", $key));
   }
}

注意:作为Styphon在评论中提到如果你想得到最后一个元素编号,没有必要遍历整个数组,只处理最后一个元素

答案 2 :(得分:0)

正如我在评论中提到的,重组数组会好得多,因为您当前的结构对您想要做的事情没有帮助。但是,假设这不是一个选项,那么该做什么:

$key = end(array_keys($array));
$num = substr($key, 11);

您可以在工作here on eval.in中看到此示例。


如果最后一个键并不总是你想要的那个,这将有效:

$keyArr = array_keys($array);
$keyRev = array_reverse($keyArr);
foreach($keyRev as $key) {
  if(stripos($key, 'amount') === FALSE && stripos($key, 'size') === FALSE) {
    $num = substr($key, 11);
    break;
  }
}

echo $num;

您可以在工作here on eval.in中看到此示例。

答案 3 :(得分:0)

$a = array(
    array(['ingediant1'] => 
        array(
            'amount' => 1, 
            'description' => 'whatever'
            )
        )
);
$amount = 0;
foreach ($a as $ingediant => $info) {
    $amount += $info['amount'];
}

如果您按照我的方式重新构建阵列,您应该能够轻松获得总成分。