组合键,字符串中不同数组的值

时间:2015-06-04 07:41:34

标签: php arrays

我有一个看起来像这样的字符串:

$input_string = '<script>some data = 
{
    first: [[111,55],[123,66]],
    theColor: "#000000",
    second: [[111,95],[123,77]]
};
</script>'

正如你所看到的,它是一个复杂的字符串,带有一些可能的垃圾,以及两个数组混合在一起。数组的第一个维度在每个数组中是相同的,即&#39; 111&#39;和&#39; 123&#39; - 这应该是创建新数组的关键。

所以我需要构建新的数组,使用该键/值对并为第一个产生类似的东西:

array() {
    '111' =>
    array(2) {
        'first' => 
        string(2) "55"
        'second' =>
        string(2) "95"
    }
}

1 个答案:

答案 0 :(得分:1)

我使用正则表达式来提取2个独立数组中的键和值。

请参阅Demo

<?php

$re = "/(\\[?(?:\\[(\\d{1,}),(\\d{1,})\\]))/"; 
$str = '<script>some data = 
{
first: [[111,55],[123,66]],
theColor: "#000000",
second: [[111,95],[123,77]]
};
</script>'; 

preg_match_all($re, $str, $matches);

$output = array();

for($i = 0; $i < count($matches); ++$i)
{
    // If Key already exists - We push
    if(isset($output[($matches[2][$i])]))
        array_push($output[($matches[2][$i])], $matches[3][$i]);

    // Otherwise we create an array to store possible future values.
    else
        $output[($matches[2][$i])] = array( 0 => $matches[3][$i]);
}

print "<pre>";
print_r($output);
print "</pre>";


?>

输出:

Array
(
[111] => Array
    (
        [0] => 55
        [1] => 95
    )

[123] => Array
    (
        [0] => 66
        [1] => 77
    )

)

Ezy Pezy Lemon Squizzy。