2

配列で検索している値に基づいてキー インデックスを取得しようとしています。私は次の配列を持っています:

    [0] => Array
                (
                    [n1:ProductWithTermPricingOptions] => Array
                        (
                            [n1:ProductName] => Customer will provide modem
                            [n1:PricingOptions] => Array
                                (
                                    [n1:Priority] => 600
                                    [n1:PricingOptionCode] => LCTL_SA_MDM_NONE_LCTL:NONE:MODEM:IN:CON:SA:na:na:NONE:NONE:-1:-1:NONE:LCTL:NONE:0:na:NONE:A:PO:na:0:NULL:NULL:NULL
                                    [n1:ProductMonthlyCharge] => $0.00
                                    [n1:PromoMonthlyCharge] => $0.00
                                    [n1:ProductActivationCharge] => $0.00
                                    [n1:ProductActivationChargeDescription] => Array
                                        (
                                        )

                                    [n1:ContractLength] => Array
                                        (
                                        )


                                        (
                                        )


                                        (
                                        )

                                    [n1:ProductDisclaimer] => Array
                                        (
                                        )


                                )

                        )

「Customer will provide modem」という値が存在するキー番号を取得する必要があります。この場合、キーに対して番号 0 を返す必要があります。他の状況では、別の位置を返します。次のことを試しましたが、値が [0] ではなくキーを返します。

public static function searchArrayKeybyValue(array $array, $search) {
    foreach ( new RecursiveIteratorIterator ( new RecursiveArrayIterator ( $array ) ) as $key => $value ) {
        if ($search === $value)
            return $key;
    }
    return "N/A";
}

どんな助けでも大歓迎です。ここでの私の目標は、このオプションを配列の最後の位置に配置することです。ありがとうございました。

4

3 に答える 3

2
function array_finder($array, $search, $parent_key = false)
{
   foreach ($array as $local_key => $value) {
      $key = ($parent_key === false) ? $local_key : $parent_key;

      if (is_array($value) and ($subsearch = array_finder($value, $search, $key)) !== false) {
         return $subsearch;
      } elseif ($value == $search) {
         return $key;
      }
   }
   return false;
}
echo array_finder($array, 'Customer will provide modem');
于 2013-10-22T23:26:03.263 に答える
0

最も外側のキーではなく、内側のキーを返しています。foreach外側の配列には法線を使用し、コンテンツには再帰イテレータを使用します。

foreach ($array as $key => $subarray) {
    foreach (new RecursiveIterator($subarray) as $value) {
        if ($value === $search) {
            return $key;
        }
    }
}
于 2013-10-22T21:54:29.027 に答える